Skip to content
  • Simon Marlow's avatar
    Fix a deadlock, and possibly other problems · 3b97d0d0
    Simon Marlow authored
    After a bound thread had completed, its TSO remains in the heap until
    it has been GC'd, although the associated Task is returned to the
    caller where it is freed and possibly re-used.  
    
    The bug was that GC was following the pointer to the Task and updating
    the TSO field, meanwhile the Task had already been recycled (it was
    being used by exitScheduler()). Confusion ensued, leading to a very
    occasional deadlock at shutdown, but in principle it could result in
    other crashes too.
    
    The fix is to remove the link between the TSO and the Task when the
    TSO has completed and the call to schedule() has returned; see
    comments in Schedule.c.
    3b97d0d0