From: Gabe Black Date: Sat, 28 Mar 2020 09:04:47 +0000 (-0700) Subject: scons: Fix an exception in the DictImporter on scons shutdown. X-Git-Tag: v20.0.0.0~218 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7e303da76fa5ffab75a1a98758b86d069c0a480c;p=gem5.git scons: Fix an exception in the DictImporter on scons shutdown. The DictImporter's __del__ method calls unload, and that imports sys.modules so that it can remove the modules that the DictImporter had set up as the importer goes away. Unfortunately, the importer only goes away when python is shutting down, and at that time some aspects of the system, namely sys.meta_path, have been cleaned up. When unload tries to import sys, that causes an exception which scons/python reports but which doesn't do anything bad otherwise. In all of the examples of this older style of import object online, none had a __del__ method, and none worried about cleaning up sys.modules when they went away. In light of that, I've removed the __del__ method entirely. Another reason I think it's safe to remove __del__ is that the importer was not actually being deleted even when it was removed from sys.meta_path, and all the modules it had loaded where removed from sys.modules. I think that was because the SimObject classes that it had set up still had references (they are used later in the SConscript), and those would, either directly or indirectly, refer back to the modules and the importer. Those remaining references kept the importer alive, preventing __del__ from being called before all those other objects were cleaned up. I think in python 2, the order things were cleaned up just so happened to avoid trying to import sys when it was no longer possible, but in python 3 that changed and resulted in this exception being thrown. I've tried building gem5 with scons running under python 2 and python 3, and with this change there is no error at shutdown. Both also produce a gem5 binary which can run hello world without problems. Change-Id: Ib1f5c7403df57fc420cec7ec0fef20a164a06991 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/27247 Tested-by: Gem5 Cloud Project GCB service account <345032938727@cloudbuild.gserviceaccount.com> Tested-by: kokoro Reviewed-by: Bobby R. Bruce Maintainer: Bobby R. Bruce --- diff --git a/src/SConscript b/src/SConscript index ed7e1ea54..90f9b7683 100644 --- a/src/SConscript +++ b/src/SConscript @@ -724,9 +724,6 @@ class DictImporter(object): self.modules = modules self.installed = set() - def __del__(self): - self.unload() - def unload(self): import sys for module in self.installed: