Changeset 5d73509 in rtems


Ignore:
Timestamp:
05/18/21 09:28:08 (14 months ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
5
Children:
8d54187
Parents:
be5d2bc0
git-author:
Sebastian Huber <sebastian.huber@…> (05/18/21 09:28:08)
git-committer:
Sebastian Huber <sebastian.huber@…> (05/04/22 13:57:37)
Message:

posix: Fix use of clock for relative times

Close #4429.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpukit/posix/src/nanosleep.c

    rbe5d2bc0 r5d73509  
    6565{
    6666  Thread_queue_Context   queue_context;
    67   struct timespec        uptime;
     67  struct timespec        now;
    6868  const struct timespec *end;
    6969  Thread_Control        *executing;
     
    8282  if ( ( flags & TIMER_ABSTIME ) != 0 ) {
    8383    end = rqtp;
     84  } else {
     85    if ( clock_id == CLOCK_REALTIME ) {
     86      _Timecounter_Nanotime( &now );
     87    } else {
     88      _Timecounter_Nanouptime( &now );
     89    }
    8490
    85     if ( clock_id == CLOCK_REALTIME ) {
    86       _Thread_queue_Context_set_enqueue_timeout_realtime_timespec(
    87         &queue_context,
    88         end
    89       );
    90     } else {
    91       _Thread_queue_Context_set_enqueue_timeout_monotonic_timespec(
    92         &queue_context,
    93         end
    94       );
    95     }
     91    end = _Watchdog_Future_timespec( &now, rqtp );
     92  }
     93
     94  if ( clock_id == CLOCK_REALTIME ) {
     95    _Thread_queue_Context_set_enqueue_timeout_realtime_timespec(
     96      &queue_context,
     97      end
     98    );
    9699  } else {
    97     _Timecounter_Nanouptime( &uptime );
    98     end = _Watchdog_Future_timespec( &uptime, rqtp );
    99100    _Thread_queue_Context_set_enqueue_timeout_monotonic_timespec(
    100101      &queue_context,
     
    121122      struct timespec actual_end;
    122123
    123       _Timecounter_Nanouptime( &actual_end );
     124      if ( clock_id == CLOCK_REALTIME ) {
     125        _Timecounter_Nanotime( &actual_end );
     126      } else {
     127        _Timecounter_Nanouptime( &actual_end );
     128      }
    124129
    125130      if ( _Timespec_Less_than( &actual_end, end ) ) {
Note: See TracChangeset for help on using the changeset viewer.