From: Zac Medico Date: Sat, 13 Nov 2010 17:09:29 +0000 (-0800) Subject: EbuildFetcher: suppress finally blocks after fork X-Git-Tag: v2.2.0_alpha5~25 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=475b2c19abf9911c7d104ac9b40e366fccafd7a3;p=portage.git EbuildFetcher: suppress finally blocks after fork This should fix bug #345289. --- diff --git a/pym/_emerge/EbuildFetcher.py b/pym/_emerge/EbuildFetcher.py index 96f295f3b..bfac5a6c0 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): """