Changeset a3b4632 in rtems


Ignore:
Timestamp:
Oct 4, 2005, 9:53:58 PM (15 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Children:
24b6d2f
Parents:
dc4bd19
Message:

2005-10-04 Till Straumann <strauman@…>

PR 829/rtems

  • src/tasks.c, src/taskvariabledelete.c: If task variables are deleted from a different context (i.e., executing context != owner of the task variable. The owner meaning the task that registered the dtor in question) the argument passed to the task variable dtor must be tvar and not *ptr which yields the executing task's value of the task variable instead of the owner's.
Location:
cpukit/rtems
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • cpukit/rtems/ChangeLog

    rdc4bd19 ra3b4632  
     12005-10-04      Till Straumann <strauman@slac.stanford.edu>
     2
     3        PR 829/rtems
     4        * src/tasks.c, src/taskvariabledelete.c: If task variables are deleted
     5        from a different context (i.e., executing context != owner of the
     6        task variable. The owner meaning the task that registered the dtor in
     7        question) the argument passed to the task variable dtor must be tvar
     8        and not *ptr which yields the executing task's value of the task
     9        variable instead of the owner's.
     10
    1112005-08-18      Andrew Sinclair <Andrew.Sinclair@elprotech.com>
    212
  • cpukit/rtems/src/tasks.c

    rdc4bd19 ra3b4632  
    109109  while (tvp) {
    110110    next = tvp->next;
    111     if  (tvp->dtor)
     111    if (_Thread_Is_executing(deleted)) {
     112      if  (tvp->dtor)
    112113        (*tvp->dtor)(*tvp->ptr);
    113     if (_Thread_Is_executing(deleted))
    114         *tvp->ptr = tvp->gval;
     114      *tvp->ptr = tvp->gval;
     115    } else {
     116      if  (tvp->dtor)
     117        (*tvp->dtor)(tvp->tval);
     118    }
    115119    _Workspace_Free( tvp );
    116120    tvp = next;
  • cpukit/rtems/src/taskvariabledelete.c

    rdc4bd19 ra3b4632  
    5757        if (prev) prev->next = tvp->next;
    5858        else      the_thread->task_variables = tvp->next;
    59         if (tvp->dtor)
    60           (*tvp->dtor)(*tvp->ptr);
    61         if (_Thread_Is_executing(the_thread))
     59        if (_Thread_Is_executing(the_thread)) {
     60          if (tvp->dtor)
     61            (*tvp->dtor)(*tvp->ptr);
    6262          *tvp->ptr = tvp->gval;
     63        } else {
     64          if (tvp->dtor)
     65            (*tvp->dtor)(tvp->tval);
     66        }
    6367        _Workspace_Free(tvp);
    6468        _Thread_Enable_dispatch();
Note: See TracChangeset for help on using the changeset viewer.