From 3e81d52e27ea030fc93580c610c40616ab2b0559 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Sun, 29 Oct 2017 20:29:05 +0100 Subject: posix: Use far future for very long timeouts Close #3205. --- cpukit/posix/src/nanosleep.c | 14 +++----------- cpukit/posix/src/sigtimedwait.c | 16 +++++----------- 2 files changed, 8 insertions(+), 22 deletions(-) (limited to 'cpukit/posix') diff --git a/cpukit/posix/src/nanosleep.c b/cpukit/posix/src/nanosleep.c index f65c91bc17..5bd1b00aa9 100644 --- a/cpukit/posix/src/nanosleep.c +++ b/cpukit/posix/src/nanosleep.c @@ -63,7 +63,7 @@ int clock_nanosleep( ) { Thread_queue_Context queue_context; - struct timespec spare_end; + struct timespec uptime; const struct timespec *end; Thread_Control *executing; int eno; @@ -93,16 +93,8 @@ int clock_nanosleep( ); } } else { - if ( !_Watchdog_Is_valid_interval_timespec( rqtp ) ) { - return EINVAL; - } - - _TOD_Get_zero_based_uptime_as_timespec( &spare_end ); - - /* In case this overflows, then the enqueue callout will reject it */ - _Timespec_Add_to( &spare_end, rqtp ); - - end = &spare_end; + _TOD_Get_zero_based_uptime_as_timespec( &uptime ); + end = _Watchdog_Future_timespec( &uptime, rqtp ); _Thread_queue_Context_set_enqueue_timeout_monotonic_timespec( &queue_context, end diff --git a/cpukit/posix/src/sigtimedwait.c b/cpukit/posix/src/sigtimedwait.c index a0e18adef0..72f4919be9 100644 --- a/cpukit/posix/src/sigtimedwait.c +++ b/cpukit/posix/src/sigtimedwait.c @@ -76,6 +76,7 @@ int sigtimedwait( siginfo_t signal_information; siginfo_t *the_info; int signo; + struct timespec uptime; Thread_queue_Context queue_context; int error; @@ -92,20 +93,13 @@ int sigtimedwait( */ if ( timeout != NULL ) { - struct timespec end; - - if ( !_Watchdog_Is_valid_interval_timespec( timeout ) ) { - return EINVAL; - } - - _TOD_Get_zero_based_uptime_as_timespec( &end ); - - /* In case this overflows, then the enqueue callout will reject it */ - _Timespec_Add_to( &end, timeout ); + const struct timespec *end; + _TOD_Get_zero_based_uptime_as_timespec( &uptime ); + end = _Watchdog_Future_timespec( &uptime, timeout ); _Thread_queue_Context_set_enqueue_timeout_monotonic_timespec( &queue_context, - &end + end ); } else { _Thread_queue_Context_set_enqueue_do_nothing_extra( &queue_context ); -- cgit v1.2.3