summaryrefslogtreecommitdiffstats
path: root/testsuites/sptests/sp28/init.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2000-01-21 15:07:55 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2000-01-21 15:07:55 +0000
commitc941a980ccbd8def1d925fc5c69a22f40e1e5060 (patch)
tree4b2b9ae1c94411a26ed2c5c1fa747a3fd296a4ae /testsuites/sptests/sp28/init.c
parentPatch from Eric Norum <eric@cls.usask.ca> to remove warnings. (diff)
downloadrtems-c941a980ccbd8def1d925fc5c69a22f40e1e5060.tar.bz2
Patch from Eric Norum <eric@cls.usask.ca> to implement this:
I'd like to propose a change to RTEMS task variables that I think would make them more useful. I think that it is early enough in their existence to still make changes to their API. 1) Change type from `int' to `void *'. 2) Add extra argument to task_variable_add -- if non-NULL, a pointer to a `destructor' function to be called when the task exits. This function would be called with that task's value of the task variable as its argument. In many cases, the `dtor' function could be `free'. rtems_status_code rtems_task_variable_add ( rtems_id tid, void **ptr, void (*dtor)(void *)); rtems_status_code rtems_task_variable_delete (rtems_id tid, void **ptr); This would be all we'd need to cleanly and efficiently support C++ per-thread exception information without dragging in all that POSIX API stuff.
Diffstat (limited to '')
-rw-r--r--testsuites/sptests/sp28/init.c26
1 files changed, 12 insertions, 14 deletions
diff --git a/testsuites/sptests/sp28/init.c b/testsuites/sptests/sp28/init.c
index d058f79ef6..f6f7d70218 100644
--- a/testsuites/sptests/sp28/init.c
+++ b/testsuites/sptests/sp28/init.c
@@ -22,7 +22,7 @@ rtems_task Init(rtems_task_argument argument);
#include <rtems/error.h>
#include <stdio.h>
-volatile int taskvar;
+volatile void *taskvar;
rtems_task
subtask (rtems_task_argument arg)
@@ -31,37 +31,36 @@ subtask (rtems_task_argument arg)
int i;
rtems_status_code sc;
- sc = rtems_task_variable_add (RTEMS_SELF, (void *) &taskvar);
+ sc = rtems_task_variable_add (RTEMS_SELF, &taskvar, NULL);
if (sc != RTEMS_SUCCESSFUL) {
printf ("Can't add task variable: %s\n", rtems_status_text (sc));
rtems_task_suspend (RTEMS_SELF);
}
- taskvar = localvar;
+ taskvar = (void *)localvar;
while (localvar < 1000) {
localvar++;
rtems_task_wake_after (0);
- taskvar++;
+ taskvar = (void *)((int)taskvar + 1);
rtems_task_wake_after (0);
- if (taskvar != localvar) {
- printf ("Task:%d taskvar:%d localvar:%d\n", arg, taskvar, localvar);
+ if ((int)taskvar != localvar) {
+ printf ("Task:%d taskvar:%d localvar:%d\n", arg, (int)taskvar, localvar);
rtems_task_suspend (RTEMS_SELF);
}
}
- sc = rtems_task_variable_delete (RTEMS_SELF, (void *) &taskvar);
+ sc = rtems_task_variable_delete (RTEMS_SELF, &taskvar);
if (sc != RTEMS_SUCCESSFUL) {
printf ("Can't delete task variable: %s\n", rtems_status_text (sc));
rtems_task_suspend (RTEMS_SELF);
}
for (i = 0 ; ; i++) {
- taskvar = localvar = 100 * arg;
+ taskvar = (void *)(localvar = 100 * arg);
rtems_task_wake_after (0);
- if (taskvar == localvar) {
- printf ("Task:%d taskvar:%d localvar:%d\n", arg, taskvar, localvar);
+ if ((int)taskvar == localvar) {
+ printf ("Task:%d taskvar:%d localvar:%d\n", arg, (int)taskvar, localvar);
rtems_task_suspend (RTEMS_SELF);
}
if ((arg == 3) && (i == 100)) {
- puts ("Task variables test succeeded.");
- puts ("*** END OF TEST SP28 ***");
+ printf ("Task variables test succeeded.\n");
exit (0);
}
}
@@ -75,7 +74,7 @@ starttask (int arg)
sc = rtems_task_create (rtems_build_name ('S', 'R', 'V', arg + 'A'),
100,
- RTEMS_MINIMUM_STACK_SIZE * 3,
+ 10000,
RTEMS_PREEMPT|RTEMS_NO_TIMESLICE|RTEMS_NO_ASR|RTEMS_INTERRUPT_LEVEL(0),
RTEMS_NO_FLOATING_POINT|RTEMS_LOCAL,
&tid);
@@ -93,7 +92,6 @@ starttask (int arg)
rtems_task
Init (rtems_task_argument ignored)
{
- puts ("*** START OF TEST SP28 ***");
starttask (1);
starttask (2);
starttask (3);