1. 09 Aug, 2002 18 commits
  2. 08 Aug, 2002 20 commits
  3. 07 Aug, 2002 2 commits
    • Tim Peters's avatar
      Added info about the right way to leave the body of a trashcan-protected · 027d420b
      Tim Peters authored
      destructor early.
      027d420b
    • Guido van Rossum's avatar
      Fix a subtle bug in the trashcan code I added yesterday to · 9c2687d5
      Guido van Rossum authored
      subtype_dealloc().
      
      When call_finalizer() failed, it would return without going through
      the trashcan end macro, thereby unbalancing the trashcan nesting level
      counter, and thereby defeating the test case (slottrash() in
      test_descr.py).  This in turn meant that the assert in the GC_UNTRACK
      macro wasn't triggered by the slottrash() test despite a bug in the
      code: _PyTrash_destroy_chain() calls the dealloc routine with an
      object that's untracked, and the assert in the GC_UNTRACK macro would
      fail on this; but because of an earlier test that resurrects an
      object, causing call_finalizer() to fail and the trashcan nesting
      level to be unbalanced, so _PyTrash_destroy_chain() was never called.
      Calling the slottrash() test in isolation *did* trigger the assert,
      however.
      
      So the fix is twofold: (1) call the GC_UnTrack() function instead of
      the GC_UNTRACK macro, because the function is safe when the object is
      already untracked; (2) when call_finalizer() fails, jump to a label
      that exits through the trashcan end macro, keeping the trashcan
      nesting balanced.
      9c2687d5