diff options
Diffstat (limited to 'cpukit/rtems/src/taskvariableadd.c')
-rw-r--r-- | cpukit/rtems/src/taskvariableadd.c | 73 |
1 files changed, 35 insertions, 38 deletions
diff --git a/cpukit/rtems/src/taskvariableadd.c b/cpukit/rtems/src/taskvariableadd.c index a1d7fef19d..080d6eebf1 100644 --- a/cpukit/rtems/src/taskvariableadd.c +++ b/cpukit/rtems/src/taskvariableadd.c @@ -41,50 +41,47 @@ rtems_status_code rtems_task_variable_add( the_thread = _Thread_Get (tid, &location); switch (location) { -#if defined(RTEMS_MULTIPROCESSING) - case OBJECTS_REMOTE: - _Thread_Dispatch(); - return RTEMS_ILLEGAL_ON_REMOTE_OBJECT; -#endif - - case OBJECTS_ERROR: - default: - return RTEMS_INVALID_ID; - case OBJECTS_LOCAL: - - /* - * Figure out if the variable is already in this task's list. - */ + case OBJECTS_LOCAL: + /* + * Figure out if the variable is already in this task's list. + */ + tvp = the_thread->task_variables; + while (tvp) { + if (tvp->ptr == ptr) { + tvp->dtor = dtor; + _Thread_Enable_dispatch(); + return RTEMS_SUCCESSFUL; + } + tvp = (rtems_task_variable_t *)tvp->next; + } - tvp = the_thread->task_variables; - while (tvp) { - if (tvp->ptr == ptr) { - tvp->dtor = dtor; + /* + * Now allocate memory for this task variable. + */ + new = (rtems_task_variable_t *) + _Workspace_Allocate(sizeof(rtems_task_variable_t)); + if (new == NULL) { _Thread_Enable_dispatch(); - return RTEMS_SUCCESSFUL; + return RTEMS_NO_MEMORY; } - tvp = (rtems_task_variable_t *)tvp->next; - } + new->gval = *ptr; + new->ptr = ptr; + new->dtor = dtor; - /* - * Now allocate memory for this task variable. - */ - - new = (rtems_task_variable_t *) - _Workspace_Allocate(sizeof(rtems_task_variable_t)); - if (new == NULL) { + new->next = (struct rtems_task_variable_tt *)the_thread->task_variables; + the_thread->task_variables = new; _Thread_Enable_dispatch(); - return RTEMS_NO_MEMORY; - } - new->gval = *ptr; - new->ptr = ptr; - new->dtor = dtor; + return RTEMS_SUCCESSFUL; + +#if defined(RTEMS_MULTIPROCESSING) + case OBJECTS_REMOTE: + _Thread_Dispatch(); + return RTEMS_ILLEGAL_ON_REMOTE_OBJECT; +#endif - new->next = (struct rtems_task_variable_tt *)the_thread->task_variables; - the_thread->task_variables = new; - _Thread_Enable_dispatch(); - return RTEMS_SUCCESSFUL; + case OBJECTS_ERROR: + break; } - return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ + return RTEMS_INVALID_ID; } |