From e1618491adc5c0ef214c25d4e3b882e8586a2fee Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sat, 4 Oct 2014 22:15:27 +0200 Subject: Issue #21905: Avoid RuntimeError in pickle.whichmodule() when sys.modules is mutated while iterating. Patch by Olivier Grisel. --- Lib/pickle.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'Lib/pickle.py') diff --git a/Lib/pickle.py b/Lib/pickle.py index 3fc2596e67..663773f3d9 100644 --- a/Lib/pickle.py +++ b/Lib/pickle.py @@ -280,7 +280,9 @@ def whichmodule(obj, name, allow_qualname=False): module_name = getattr(obj, '__module__', None) if module_name is not None: return module_name - for module_name, module in sys.modules.items(): + # Protect the iteration by using a list copy of sys.modules against dynamic + # modules that trigger imports of other modules upon calls to getattr. + for module_name, module in list(sys.modules.items()): if module_name == '__main__' or module is None: continue try: -- cgit v1.2.1