summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2012-10-16 08:55:22 -0700
committerZac Medico <zmedico@gentoo.org>2012-10-16 08:55:22 -0700
commite9fd283aedf54e2effc73f4157524fe9a26993c0 (patch)
tree01b7cf3b004ffdc4a364244cb0baed6ac02aa1c0
parent65e69242814553b826b9277495a5f62b79569269 (diff)
downloadportage-e9fd283aedf54e2effc73f4157524fe9a26993c0.tar.gz
portage-e9fd283aedf54e2effc73f4157524fe9a26993c0.tar.bz2
portage-e9fd283aedf54e2effc73f4157524fe9a26993c0.zip
run_action: gc locals of calling func
-rw-r--r--pym/_emerge/actions.py9
-rw-r--r--pym/_emerge/main.py3
2 files changed, 10 insertions, 2 deletions
diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index 3336e9fca..c403d8974 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -3426,7 +3426,14 @@ def repo_name_duplicate_check(trees):
return bool(ignored_repos)
-def run_action(settings, trees, mtimedb, myaction, myopts, myfiles):
+def run_action(settings, trees, mtimedb, myaction, myopts, myfiles,
+ gc_locals=None):
+
+ # The caller may have its local variables garbage collected, so
+ # they don't consume any memory during this long-running function.
+ if gc_locals is not None:
+ gc_locals()
+ gc_locals = None
# skip global updates prior to sync, since it's called after sync
if myaction not in ('help', 'info', 'sync', 'version') and \
diff --git a/pym/_emerge/main.py b/pym/_emerge/main.py
index fd1fd069b..ef94a4760 100644
--- a/pym/_emerge/main.py
+++ b/pym/_emerge/main.py
@@ -999,4 +999,5 @@ def emerge_main(args=None):
tmpcmdline.extend(args)
myaction, myopts, myfiles = parse_opts(tmpcmdline)
- return run_action(settings, trees, mtimedb, myaction, myopts, myfiles)
+ return run_action(settings, trees, mtimedb, myaction, myopts, myfiles,
+ gc_locals=locals().clear)