### Eclipse Workspace Patch 1.0 #P rtems-head Index: testsuites/psxtests/psxtimer01/psxtimer.c =================================================================== RCS file: /usr1/CVS/rtems/testsuites/psxtests/psxtimer01/psxtimer.c,v retrieving revision 1.2 diff -u -r1.2 psxtimer.c --- testsuites/psxtests/psxtimer01/psxtimer.c 18 Jan 2008 16:33:35 -0000 1.2 +++ testsuites/psxtests/psxtimer01/psxtimer.c 18 Aug 2008 20:11:27 -0000 @@ -97,6 +97,7 @@ /* set the timer in periodic mode */ timerdata.it_interval = my_period; timerdata.it_value = my_period; + timerdata.it_value.tv_sec *= 2; if (timer_settime(timer_id,POSIX_TIMER_RELATIVE,&timerdata,&timergetdata) == -1) { perror ("Error in timer setting\n"); pthread_exit ((void *) -1); @@ -186,7 +187,7 @@ pthread_mutex_lock (&data.mutex); clock = time(NULL); - printf("Executing task B with count = %2i %s\n", + printf("Executing task B with count = %2i %s", params->count, ctime(&clock) ); data.updated = TRUE; @@ -234,6 +235,7 @@ /* set the timer in periodic mode */ timerdata.it_interval = my_period; timerdata.it_value = my_period; + timerdata.it_value.tv_sec *= 2; if (timer_settime(timer_id,POSIX_TIMER_RELATIVE,&timerdata,NULL) == -1) { perror ("Error in timer setting\n"); pthread_exit ((void *) -1); @@ -257,7 +259,7 @@ pthread_cond_wait (&data.sync,&data.mutex); } clock = time(NULL); - printf("Executing task C with count = %2i %s\n", + printf("Executing task C with count = %2i %s", params->count, ctime(&clock) ); Index: testsuites/psxtests/psxtimer01/psxtimer01.scn =================================================================== RCS file: /usr1/CVS/rtems/testsuites/psxtests/psxtimer01/psxtimer01.scn,v retrieving revision 1.2 diff -u -r1.2 psxtimer01.scn --- testsuites/psxtests/psxtimer01/psxtimer01.scn 18 Jan 2008 16:33:35 -0000 1.2 +++ testsuites/psxtests/psxtimer01/psxtimer01.scn 18 Aug 2008 20:11:27 -0000 @@ -1,40 +1,41 @@ *** POSIX Timers Test 01 *** task A: timer_settime - value=0:0 interval=0:0 -Executing task A Fri Jan 1 00:00:01 1988 -Executing task B with x = 1 Fri Jan 1 00:00:02 1988 -Executing task A Fri Jan 1 00:00:02 1988 -Executing task C with x = 1 Fri Jan 1 00:00:03 1988 -Executing task A Fri Jan 1 00:00:03 1988 -Executing task B with x = 2 Fri Jan 1 00:00:04 1988 -Executing task A Fri Jan 1 00:00:04 1988 -Executing task A Fri Jan 1 00:00:05 1988 -Executing task B with x = 3 Fri Jan 1 00:00:06 1988 -Executing task C with x = 3 Fri Jan 1 00:00:06 1988 -Executing task A Fri Jan 1 00:00:06 1988 -Executing task A Fri Jan 1 00:00:07 1988 -Executing task B with x = 4 Fri Jan 1 00:00:08 1988 -Executing task A Fri Jan 1 00:00:08 1988 -Executing task C with x = 4 Fri Jan 1 00:00:09 1988 -Executing task A Fri Jan 1 00:00:09 1988 -Executing task B with x = 5 Fri Jan 1 00:00:10 1988 -Executing task A Fri Jan 1 00:00:10 1988 -Executing task A Fri Jan 1 00:00:11 1988 -Executing task B with x = 6 Fri Jan 1 00:00:12 1988 -Executing task C with x = 6 Fri Jan 1 00:00:12 1988 -Executing task A Fri Jan 1 00:00:12 1988 -Executing task A Fri Jan 1 00:00:13 1988 -Executing task B with x = 7 Fri Jan 1 00:00:14 1988 -Executing task A Fri Jan 1 00:00:14 1988 -Executing task C with x = 7 Fri Jan 1 00:00:15 1988 -Executing task A Fri Jan 1 00:00:15 1988 -Executing task B with x = 8 Fri Jan 1 00:00:16 1988 -Executing task A Fri Jan 1 00:00:16 1988 -Executing task A Fri Jan 1 00:00:17 1988 -Executing task B with x = 9 Fri Jan 1 00:00:18 1988 -Executing task C with x = 9 Fri Jan 1 00:00:18 1988 -Executing task A Fri Jan 1 00:00:18 1988 +Executing task B with count = 10 Fri Jan 1 00:00:02 1988 +Executing task A with count = 20 Fri Jan 1 00:00:02 1988 +Executing task A with count = 19 Fri Jan 1 00:00:03 1988 +Executing task B with count = 9 Fri Jan 1 00:00:04 1988 +Executing task A with count = 18 Fri Jan 1 00:00:04 1988 +Executing task A with count = 17 Fri Jan 1 00:00:05 1988 +Executing task B with count = 8 Fri Jan 1 00:00:06 1988 +Executing task C with count = 6 Fri Jan 1 00:00:06 1988 +Executing task A with count = 16 Fri Jan 1 00:00:06 1988 +Executing task A with count = 15 Fri Jan 1 00:00:07 1988 +Executing task B with count = 7 Fri Jan 1 00:00:08 1988 +Executing task A with count = 14 Fri Jan 1 00:00:08 1988 +Executing task C with count = 5 Fri Jan 1 00:00:09 1988 +Executing task A with count = 13 Fri Jan 1 00:00:09 1988 +Executing task B with count = 6 Fri Jan 1 00:00:10 1988 +Executing task A with count = 12 Fri Jan 1 00:00:10 1988 +Executing task A with count = 11 Fri Jan 1 00:00:11 1988 +Executing task B with count = 5 Fri Jan 1 00:00:12 1988 +Executing task C with count = 4 Fri Jan 1 00:00:12 1988 +Executing task A with count = 10 Fri Jan 1 00:00:12 1988 +Executing task A with count = 9 Fri Jan 1 00:00:13 1988 +Executing task B with count = 4 Fri Jan 1 00:00:14 1988 +Executing task A with count = 8 Fri Jan 1 00:00:14 1988 +Executing task C with count = 3 Fri Jan 1 00:00:15 1988 +Executing task A with count = 7 Fri Jan 1 00:00:15 1988 +Executing task B with count = 3 Fri Jan 1 00:00:16 1988 +Executing task A with count = 6 Fri Jan 1 00:00:16 1988 +Executing task A with count = 5 Fri Jan 1 00:00:17 1988 +Executing task B with count = 2 Fri Jan 1 00:00:18 1988 +Executing task C with count = 2 Fri Jan 1 00:00:18 1988 +Executing task A with count = 4 Fri Jan 1 00:00:18 1988 +Executing task A with count = 3 Fri Jan 1 00:00:19 1988 +Executing task B with count = 1 Fri Jan 1 00:00:20 1988 +Executing task A with count = 2 Fri Jan 1 00:00:20 1988 +Executing task C with count = 1 Fri Jan 1 00:00:21 1988 +Executing task A with count = 1 Fri Jan 1 00:00:21 1988 task C: timer_getoverrun - overruns=0 task C: timer_gettime - 2:0 remaining from 3:0 -Executing task A Fri Jan 1 00:00:19 1988 -Executing task B with x = 10 Fri Jan 1 00:00:20 1988 *** END OF POSIX Timers Test 01 *** Index: cpukit/posix/src/timersettime.c =================================================================== RCS file: /usr1/CVS/rtems/cpukit/posix/src/timersettime.c,v retrieving revision 1.4 diff -u -r1.4 timersettime.c --- cpukit/posix/src/timersettime.c 18 Jul 2008 18:45:56 -0000 1.4 +++ cpukit/posix/src/timersettime.c 18 Aug 2008 20:11:26 -0000 @@ -36,14 +36,17 @@ POSIX_Timer_Control *ptimer; Objects_Locations location; boolean activated; + uint32_t initial_period; struct itimerspec normalize; if ( !value ) rtems_set_errno_and_return_minus_one( EINVAL ); /* First, it verifies if the structure "value" is correct */ - if ( ( value->it_value.tv_nsec > TOD_NANOSECONDS_PER_SECOND ) || - ( value->it_value.tv_nsec < 0 ) ) { + if ( ( value->it_value.tv_nsec >= TOD_NANOSECONDS_PER_SECOND ) || + ( value->it_value.tv_nsec < 0 ) || + ( value->it_interval.tv_nsec >= TOD_NANOSECONDS_PER_SECOND) || + ( value->it_interval.tv_nsec < 0 )) { /* The number of nanoseconds is not correct */ rtems_set_errno_and_return_minus_one( EINVAL ); } @@ -57,7 +60,7 @@ /* Convert absolute to relative time */ if (flags == TIMER_ABSTIME) { /* Check for seconds in the past */ - if ( _Timespec_Greater_than( &normalize.it_value, &_TOD_Now ) ) + if ( _Timespec_Greater_than( &_TOD_Now, &normalize.it_value ) ) rtems_set_errno_and_return_minus_one( EINVAL ); _Timespec_Subtract( &_TOD_Now, &normalize.it_value, &normalize.it_value ); } @@ -88,11 +91,13 @@ } /* Convert from seconds and nanoseconds to ticks */ - ptimer->ticks = _Timespec_To_ticks( &normalize.it_value ); + ptimer->ticks = _Timespec_To_ticks( &value->it_interval ); + initial_period = _Timespec_To_ticks( &normalize.it_value ); + activated = _POSIX_Timer_Insert_helper( &ptimer->Timer, - ptimer->ticks, + initial_period, ptimer->Object.id, _POSIX_Timer_TSR, ptimer