Changeset 3c838f1a in rtems
- Timestamp:
- 09/01/05 14:46:02 (19 years ago)
- Children:
- feedcdc
- Parents:
- 45a32542
- Location:
- cpukit/posix
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
cpukit/posix/ChangeLog
r45a32542 r3c838f1a 1 2005-09-01 Joel Sherrill <joel@OARcorp.com> 2 3 PR 796/rtems 4 * src/semtimedwait.c: sem_timedwait is supposed to use absolute time 5 for timeout specification. This patch is a modified version of the 6 one suggested by Peter Dufault. 7 1 8 2005-08-17 Nuno Costa <nuno-costa@iol.pt> 2 9 -
cpukit/posix/src/semtimedwait.c
r45a32542 r3c838f1a 30 30 int sem_timedwait( 31 31 sem_t *sem, 32 const struct timespec * timeout32 const struct timespec *abstime 33 33 ) 34 34 { 35 return _POSIX_Semaphore_Wait_support( 36 sem, 37 TRUE, 38 _POSIX_Timespec_to_interval( timeout ) 39 ); 35 /* 36 * The abstime is a walltime. We turn it into an interval. 37 */ 38 Watchdog_Interval ticks; 39 struct timespec current_time; 40 struct timespec difference; 41 42 /* 43 * Error check the absolute time to timeout 44 */ 45 if ( /* abstime->tv_sec < 0 || */ abstime->tv_nsec ) /* tv_sec is unsigned */ 46 return EINVAL; 47 48 if ( abstime->tv_nsec >= TOD_NANOSECONDS_PER_SECOND ) 49 return EINVAL; 50 51 (void) clock_gettime( CLOCK_REALTIME, ¤t_time ); 52 53 /* 54 * Make sure the abstime is in the future 55 */ 56 if ( abstime->tv_sec < current_time.tv_sec ) 57 return EINVAL; 58 if ( (abstime->tv_sec == current_time.tv_sec) && 59 (abstime->tv_nsec <= current_time.tv_nsec) ) 60 return EINVAL; 61 62 _POSIX_Timespec_subtract( ¤t_time, abstime, &difference ); 63 64 ticks = _POSIX_Timespec_to_interval( &difference ); 65 66 return _POSIX_Semaphore_Wait_support( sem, TRUE, ticks ); 40 67 } 68
Note: See TracChangeset
for help on using the changeset viewer.