Ejemplo n.º 1
0
static void _RTEMS_tasks_Delete_extension(
  Thread_Control *executing,
  Thread_Control *deleted
)
{
  rtems_task_variable_t *tvp, *next;

  /*
   *  Free per task variable memory
   */

  tvp = deleted->task_variables;
  deleted->task_variables = NULL;
  while (tvp) {
    next = (rtems_task_variable_t *)tvp->next;
    _RTEMS_Tasks_Invoke_task_variable_dtor( deleted, tvp );
    tvp = next;
  }

  /*
   *  Free API specific memory
   */

  (void) _Workspace_Free( deleted->API_Extensions[ THREAD_API_RTEMS ] );
  deleted->API_Extensions[ THREAD_API_RTEMS ] = NULL;
}
Ejemplo n.º 2
0
static void _RTEMS_tasks_Terminate_extension(
  Thread_Control *executing
)
{

  /*
   *  Free per task variable memory
   *
   *  Per Task Variables are only enabled in uniprocessor configurations
   */
  #if !defined(RTEMS_SMP)
    do { 
      rtems_task_variable_t *tvp, *next;

      tvp = executing->task_variables;
      executing->task_variables = NULL;
      while (tvp) {
	next = (rtems_task_variable_t *)tvp->next;
	_RTEMS_Tasks_Invoke_task_variable_dtor( executing, tvp );
	tvp = next;
      }
    } while (0);
  #endif

  /*
   *  Run all the key destructors
   */
  _POSIX_Keys_Run_destructors( executing );
}