mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-11-16 12:34:45 +00:00
@@ -64,7 +64,7 @@ int clock_nanosleep(
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
Thread_queue_Context queue_context;
|
Thread_queue_Context queue_context;
|
||||||
struct timespec uptime;
|
struct timespec now;
|
||||||
const struct timespec *end;
|
const struct timespec *end;
|
||||||
Thread_Control *executing;
|
Thread_Control *executing;
|
||||||
int eno;
|
int eno;
|
||||||
@@ -81,21 +81,22 @@ int clock_nanosleep(
|
|||||||
|
|
||||||
if ( ( flags & TIMER_ABSTIME ) != 0 ) {
|
if ( ( flags & TIMER_ABSTIME ) != 0 ) {
|
||||||
end = rqtp;
|
end = rqtp;
|
||||||
|
|
||||||
if ( clock_id == CLOCK_REALTIME ) {
|
|
||||||
_Thread_queue_Context_set_enqueue_timeout_realtime_timespec(
|
|
||||||
&queue_context,
|
|
||||||
end
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
_Thread_queue_Context_set_enqueue_timeout_monotonic_timespec(
|
|
||||||
&queue_context,
|
|
||||||
end
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
_Timecounter_Nanouptime( &uptime );
|
if ( clock_id == CLOCK_REALTIME ) {
|
||||||
end = _Watchdog_Future_timespec( &uptime, rqtp );
|
_Timecounter_Nanotime( &now );
|
||||||
|
} else {
|
||||||
|
_Timecounter_Nanouptime( &now );
|
||||||
|
}
|
||||||
|
|
||||||
|
end = _Watchdog_Future_timespec( &now, rqtp );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( clock_id == CLOCK_REALTIME ) {
|
||||||
|
_Thread_queue_Context_set_enqueue_timeout_realtime_timespec(
|
||||||
|
&queue_context,
|
||||||
|
end
|
||||||
|
);
|
||||||
|
} else {
|
||||||
_Thread_queue_Context_set_enqueue_timeout_monotonic_timespec(
|
_Thread_queue_Context_set_enqueue_timeout_monotonic_timespec(
|
||||||
&queue_context,
|
&queue_context,
|
||||||
end
|
end
|
||||||
@@ -120,7 +121,11 @@ int clock_nanosleep(
|
|||||||
if ( eno == EINTR ) {
|
if ( eno == EINTR ) {
|
||||||
struct timespec actual_end;
|
struct timespec actual_end;
|
||||||
|
|
||||||
_Timecounter_Nanouptime( &actual_end );
|
if ( clock_id == CLOCK_REALTIME ) {
|
||||||
|
_Timecounter_Nanotime( &actual_end );
|
||||||
|
} else {
|
||||||
|
_Timecounter_Nanouptime( &actual_end );
|
||||||
|
}
|
||||||
|
|
||||||
if ( _Timespec_Less_than( &actual_end, end ) ) {
|
if ( _Timespec_Less_than( &actual_end, end ) ) {
|
||||||
_Timespec_Subtract( &actual_end, end, rmtp );
|
_Timespec_Subtract( &actual_end, end, rmtp );
|
||||||
|
|||||||
Reference in New Issue
Block a user