posix: Fix use of clock for relative times

Close #4429.
This commit is contained in:
Sebastian Huber
2021-05-18 11:28:08 +02:00
parent be5d2bc03d
commit 5d73509a34

View File

@@ -64,7 +64,7 @@ int clock_nanosleep(
)
{
Thread_queue_Context queue_context;
struct timespec uptime;
struct timespec now;
const struct timespec *end;
Thread_Control *executing;
int eno;
@@ -81,21 +81,22 @@ int clock_nanosleep(
if ( ( flags & TIMER_ABSTIME ) != 0 ) {
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 {
_Timecounter_Nanouptime( &uptime );
end = _Watchdog_Future_timespec( &uptime, rqtp );
if ( clock_id == CLOCK_REALTIME ) {
_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(
&queue_context,
end
@@ -120,7 +121,11 @@ int clock_nanosleep(
if ( eno == EINTR ) {
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 ) ) {
_Timespec_Subtract( &actual_end, end, rmtp );