Ticket #1296: patch-rtems_4_8_branch-timer_settime.txt

File patch-rtems_4_8_branch-timer_settime.txt, 6.3 KB (added by Tim FitzGeorge, on 08/19/08 at 20:48:13)

Patch for rtems-4-8-branch

Line 
1### Eclipse Workspace Patch 1.0
2#P rtems-4.8
3Index: cpukit/posix/src/ptimer1.c
4===================================================================
5RCS file: /usr1/CVS/rtems/cpukit/posix/src/Attic/ptimer1.c,v
6retrieving revision 1.22
7diff -u -r1.22 ptimer1.c
8--- cpukit/posix/src/ptimer1.c  5 Apr 2007 21:17:26 -0000       1.22
9+++ cpukit/posix/src/ptimer1.c  19 Aug 2008 20:48:13 -0000
10@@ -267,14 +267,17 @@
11   POSIX_Timer_Control *ptimer;
12   Objects_Locations    location;
13   boolean              activated;
14+  uint32_t             initial_ticks;
15 
16   if ( value == NULL ) {
17     rtems_set_errno_and_return_minus_one( EINVAL );
18   }
19 
20   /* First, it verifies if the structure "value" is correct */
21-  if ( ( value->it_value.tv_nsec > TOD_NANOSECONDS_PER_SECOND ) ||
22-       ( value->it_value.tv_nsec < 0 ) ) {
23+  if ( ( value->it_value.tv_nsec >= TOD_NANOSECONDS_PER_SECOND ) ||
24+       ( value->it_value.tv_nsec < 0 ) ||
25+       ( value->it_interval.tv_nsec >= TOD_NANOSECONDS_PER_SECOND ) ||
26+       ( value->it_interval.tv_nsec < 0 )) {
27     /* The number of nanoseconds is not correct */
28     rtems_set_errno_and_return_minus_one( EINVAL );
29   }
30@@ -326,7 +329,9 @@
31            /* The fire time is absolute: use "rtems_time_fire_when" */
32            /* First, it converts from struct itimerspec to rtems_time_of_day */
33 
34-           _Watchdog_Initialize(
35+             ptimer->ticks = _Timespec_To_ticks( &value->it_interval );
36+
37+             _Watchdog_Initialize(
38              &ptimer->Timer, _POSIX_Timer_TSR, ptimer->Object.id, ptimer );
39 
40            _Watchdog_Insert_seconds(
41@@ -351,11 +356,12 @@
42          /* The fire time is relative: use "rtems_time_fire_after" */
43          case POSIX_TIMER_RELATIVE:
44            /* First, convert from seconds and nanoseconds to ticks */
45-           ptimer->ticks = _Timespec_To_ticks( &value->it_value );
46+           ptimer->ticks = _Timespec_To_ticks( &value->it_interval );
47+           initial_ticks = _Timespec_To_ticks( &value->it_value );
48 
49            activated = _Watchdog_Insert_ticks_helper(
50              &ptimer->Timer,
51-             ptimer->ticks,
52+             initial_ticks,
53              ptimer->Object.id,
54              _POSIX_Timer_TSR,
55              ptimer
56Index: testsuites/psxtests/psxtimer/psxtimer.scn
57===================================================================
58RCS file: /usr1/CVS/rtems/testsuites/psxtests/psxtimer/Attic/psxtimer.scn,v
59retrieving revision 1.4
60diff -u -r1.4 psxtimer.scn
61--- testsuites/psxtests/psxtimer/psxtimer.scn   11 May 2007 19:44:22 -0000      1.4
62+++ testsuites/psxtests/psxtimer/psxtimer.scn   19 Aug 2008 20:48:14 -0000
63@@ -1,37 +1,34 @@
64 *** POSIX Timers Test ***
65-Executing task A Fri Jan  1 00:00:01 1988
66-Executing task B with x = 1 Fri Jan  1 00:00:02 1988
67 Executing task A Fri Jan  1 00:00:02 1988
68-Executing task C with x = 1 Fri Jan  1 00:00:03 1988
69 Executing task A Fri Jan  1 00:00:03 1988
70-Executing task B with x = 2 Fri Jan  1 00:00:04 1988
71+Executing task B with x = 1 Fri Jan  1 00:00:04 1988
72 Executing task A Fri Jan  1 00:00:04 1988
73 Executing task A Fri Jan  1 00:00:05 1988
74-Executing task B with x = 3 Fri Jan  1 00:00:06 1988
75-Executing task C with x = 3 Fri Jan  1 00:00:06 1988
76+Executing task B with x = 2 Fri Jan  1 00:00:06 1988
77+Executing task C with x = 2 Fri Jan  1 00:00:06 1988
78 Executing task A Fri Jan  1 00:00:06 1988
79 Executing task A Fri Jan  1 00:00:07 1988
80-Executing task B with x = 4 Fri Jan  1 00:00:08 1988
81+Executing task B with x = 3 Fri Jan  1 00:00:08 1988
82 Executing task A Fri Jan  1 00:00:08 1988
83-Executing task C with x = 4 Fri Jan  1 00:00:09 1988
84+Executing task C with x = 3 Fri Jan  1 00:00:09 1988
85 Executing task A Fri Jan  1 00:00:09 1988
86-Executing task B with x = 5 Fri Jan  1 00:00:10 1988
87+Executing task B with x = 4 Fri Jan  1 00:00:10 1988
88 Executing task A Fri Jan  1 00:00:10 1988
89 Executing task A Fri Jan  1 00:00:11 1988
90-Executing task B with x = 6 Fri Jan  1 00:00:12 1988
91-Executing task C with x = 6 Fri Jan  1 00:00:12 1988
92+Executing task B with x = 5 Fri Jan  1 00:00:12 1988
93+Executing task C with x = 5 Fri Jan  1 00:00:12 1988
94 Executing task A Fri Jan  1 00:00:12 1988
95 Executing task A Fri Jan  1 00:00:13 1988
96-Executing task B with x = 7 Fri Jan  1 00:00:14 1988
97+Executing task B with x = 6 Fri Jan  1 00:00:14 1988
98 Executing task A Fri Jan  1 00:00:14 1988
99-Executing task C with x = 7 Fri Jan  1 00:00:15 1988
100+Executing task C with x = 6 Fri Jan  1 00:00:15 1988
101 Executing task A Fri Jan  1 00:00:15 1988
102-Executing task B with x = 8 Fri Jan  1 00:00:16 1988
103+Executing task B with x = 7 Fri Jan  1 00:00:16 1988
104 Executing task A Fri Jan  1 00:00:16 1988
105 Executing task A Fri Jan  1 00:00:17 1988
106-Executing task B with x = 9 Fri Jan  1 00:00:18 1988
107-Executing task C with x = 9 Fri Jan  1 00:00:18 1988
108+Executing task B with x = 8 Fri Jan  1 00:00:18 1988
109+Executing task C with x = 8 Fri Jan  1 00:00:18 1988
110 Executing task A Fri Jan  1 00:00:18 1988
111 Executing task A Fri Jan  1 00:00:19 1988
112-Executing task B with x = 10 Fri Jan  1 00:00:20 1988
113+Executing task B with x = 9 Fri Jan  1 00:00:20 1988
114 *** END OF POSIX Timers Test ***
115Index: testsuites/psxtests/psxtimer/psxtimer.c
116===================================================================
117RCS file: /usr1/CVS/rtems/testsuites/psxtests/psxtimer/Attic/psxtimer.c,v
118retrieving revision 1.8
119diff -u -r1.8 psxtimer.c
120--- testsuites/psxtests/psxtimer/psxtimer.c     11 May 2007 19:44:22 -0000      1.8
121+++ testsuites/psxtests/psxtimer/psxtimer.c     19 Aug 2008 20:48:13 -0000
122@@ -82,6 +82,7 @@
123    /* set the timer in periodic mode */
124    timerdata.it_interval = my_period;
125    timerdata.it_value    = my_period;
126+   timerdata.it_value.tv_sec *= 2;
127    if (timer_settime(timer_id, 0, &timerdata, NULL) == -1) {
128      perror ("Error in timer setting\n");
129      pthread_exit ((void *) -1);
130@@ -133,6 +134,7 @@
131    /* set the timer in periodic mode */
132    timerdata.it_interval = my_period;
133    timerdata.it_value    = my_period;
134+   timerdata.it_value.tv_sec *= 2;
135    if (timer_settime(timer_id, 0, &timerdata, NULL) == -1) {
136      perror ("Error in timer setting\n");
137      pthread_exit ((void *) -1);
138@@ -191,6 +193,7 @@
139    /* set the timer in periodic mode */
140    timerdata.it_interval = my_period;
141    timerdata.it_value    = my_period;
142+   timerdata.it_value.tv_sec *= 2;
143    if (timer_settime(timer_id, 0, &timerdata, NULL) == -1) {
144      perror ("Error in timer setting\n");
145      pthread_exit ((void *) -1);