disable the garbage collector while collecting traces, so that __del__s don't get caught

This commit is contained in:
Benjamin Peterson 2010-10-17 01:29:11 +00:00
parent fc49f2a973
commit cb17094dcd
1 changed files with 12 additions and 3 deletions

View File

@ -1,3 +1,4 @@
import gc
import pprint
import sys
import unittest
@ -354,9 +355,17 @@ protect_ident = ident(protect)
def capture_events(callable, p=None):
if p is None:
p = HookWatcher()
sys.setprofile(p.callback)
protect(callable, p)
sys.setprofile(None)
# Disable the garbage collector. This prevents __del__s from showing up in
# traces.
old_gc = gc.isenabled()
gc.disable()
try:
sys.setprofile(p.callback)
protect(callable, p)
sys.setprofile(None)
finally:
if old_gc:
gc.enable()
return p.get_events()[1:-1]