Note that if gc.collect is needed to collect garbage, that generally means you have reference cycles, and if you have __del__ AND cycles then even a gc.collect won't help you. A __del__ method will prevent the proper collection of objects involved in a reference cycle.
-- John On Sat, Jun 12, 2010 at 3:20 PM, Michael Goldish <[email protected]>wrote: > If an exception is raised in a test, its traceback contains references to > objects used in the test. These references prevent garbage collection of > the > objects. Normally this isn't a problem because when a program exits the > objects are garbage-collected anyway, but fork_start() calls os._exit() > which > skips normal exit processing. Thus we can't rely on objects' __del__() > methods > being called. > > The problem can be solved by calling sys.exc_clear() to clear exception > information before exiting. It also doesn't hurt to call gc.collect() just > to > be very sure that garbage collection takes place. > > Signed-off-by: Michael Goldish <[email protected]> > --- > client/bin/parallel.py | 6 +++++- > 1 files changed, 5 insertions(+), 1 deletions(-) > > diff --git a/client/bin/parallel.py b/client/bin/parallel.py > index 1ecc75f..47dd5cd 100644 > --- a/client/bin/parallel.py > +++ b/client/bin/parallel.py > @@ -2,7 +2,7 @@ > > __author__ = """Copyright Andy Whitcroft 2006""" > > -import sys, logging, os, pickle, traceback > +import sys, logging, os, pickle, traceback, gc > from autotest_lib.client.common_lib import error, utils > > def fork_start(tmp, l): > @@ -39,6 +39,10 @@ def fork_start(tmp, l): > sys.stdout.flush() > sys.stderr.flush() > finally: > + # clear exception information to allow garbage collection of > + # objects referenced by the exception's traceback > + sys.exc_clear() > + gc.collect() > os._exit(1) > else: > try: > -- > 1.5.4.1 > > _______________________________________________ > Autotest mailing list > [email protected] > http://test.kernel.org/cgi-bin/mailman/listinfo/autotest >
_______________________________________________ Autotest mailing list [email protected] http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
