summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2010-11-13 09:16:08 -0800
committerZac Medico <zmedico@gentoo.org>2010-11-13 09:16:08 -0800
commitf456171f1fee81734b5e214488c8b86bec842d1a (patch)
tree46b658cbeebd59933652db5384bf53577910015e
parent475b2c19abf9911c7d104ac9b40e366fccafd7a3 (diff)
downloadportage-f456171f1fee81734b5e214488c8b86bec842d1a.tar.gz
portage-f456171f1fee81734b5e214488c8b86bec842d1a.tar.bz2
portage-f456171f1fee81734b5e214488c8b86bec842d1a.zip
MergeProcess: suppress finally blocks after fork
This case is like bug #345289.
-rw-r--r--pym/portage/dbapi/_MergeProcess.py18
1 files changed, 14 insertions, 4 deletions
diff --git a/pym/portage/dbapi/_MergeProcess.py b/pym/portage/dbapi/_MergeProcess.py
index b5af7142c..3cf50d22b 100644
--- a/pym/portage/dbapi/_MergeProcess.py
+++ b/pym/portage/dbapi/_MergeProcess.py
@@ -1,6 +1,8 @@
# Copyright 2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
+import traceback
+
import portage
from portage import os
from _emerge.SpawnProcess import SpawnProcess
@@ -35,7 +37,15 @@ class MergeProcess(SpawnProcess):
# is triggered when dblink._scheduler is None.
self.dblink._scheduler = None
- rval = self.dblink._merge_process(self.srcroot, self.destroot,
- self.cfgfiledict, self.conf_mem_file)
-
- os._exit(rval)
+ rval = 1
+ try:
+ rval = self.dblink._merge_process(self.srcroot, self.destroot,
+ self.cfgfiledict, self.conf_mem_file)
+ except SystemExit:
+ raise
+ except:
+ traceback.print_exc()
+ finally:
+ # Call os._exit() from finally block, in order to suppress any
+ # finally blocks from earlier in the call stack. See bug #345289.
+ os._exit(rval)