diff options
author | Zac Medico <zmedico@gentoo.org> | 2010-11-13 09:09:29 -0800 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2010-11-23 18:02:06 -0800 |
commit | faeeabc80c83c586c295ca856cc4f8d73c9d03ae (patch) | |
tree | 38a9f07922fe4984b643dd7b0a972aa87ff6f016 | |
parent | ce123ef7fdca309114fc86d03d6dac6da610cf3d (diff) | |
download | portage-faeeabc80c83c586c295ca856cc4f8d73c9d03ae.tar.gz portage-faeeabc80c83c586c295ca856cc4f8d73c9d03ae.tar.bz2 portage-faeeabc80c83c586c295ca856cc4f8d73c9d03ae.zip |
EbuildFetcher: suppress finally blocks after fork
This should fix bug #345289.
-rw-r--r-- | pym/_emerge/EbuildFetcher.py | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/pym/_emerge/EbuildFetcher.py b/pym/_emerge/EbuildFetcher.py index 443ecd529..614a0decd 100644 --- a/pym/_emerge/EbuildFetcher.py +++ b/pym/_emerge/EbuildFetcher.py @@ -1,6 +1,8 @@ # Copyright 1999-2010 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 +import traceback + from _emerge.SpawnProcess import SpawnProcess import sys import portage @@ -95,10 +97,17 @@ class EbuildFetcher(SpawnProcess): not in ('yes', 'true') rval = 1 - if fetch(self._uri_map, self._settings, fetchonly=self.fetchonly): - rval = os.EX_OK - - os._exit(rval) + try: + if fetch(self._uri_map, self._settings, fetchonly=self.fetchonly): + rval = os.EX_OK + 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) def _get_uri_map(self, portdb, ebuild_path): """ |