diff options
Diffstat (limited to 'cpukit/rtems/src/taskvariabledelete.c')
-rw-r--r-- | cpukit/rtems/src/taskvariabledelete.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/cpukit/rtems/src/taskvariabledelete.c b/cpukit/rtems/src/taskvariabledelete.c index b96f317e06..8fd900296b 100644 --- a/cpukit/rtems/src/taskvariabledelete.c +++ b/cpukit/rtems/src/taskvariabledelete.c @@ -56,10 +56,14 @@ rtems_status_code rtems_task_variable_delete( if (tvp->ptr == ptr) { if (prev) prev->next = tvp->next; else the_thread->task_variables = tvp->next; - if (tvp->dtor) - (*tvp->dtor)(*tvp->ptr); - if (_Thread_Is_executing(the_thread)) + if (_Thread_Is_executing(the_thread)) { + if (tvp->dtor) + (*tvp->dtor)(*tvp->ptr); *tvp->ptr = tvp->gval; + } else { + if (tvp->dtor) + (*tvp->dtor)(tvp->tval); + } _Workspace_Free(tvp); _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; |