]> granicus.if.org Git - python/commitdiff
Fix subprocess.Popen.__del__() fox Python shutdown
authorVictor Stinner <victor.stinner@gmail.com>
Fri, 6 Jan 2017 09:44:44 +0000 (10:44 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Fri, 6 Jan 2017 09:44:44 +0000 (10:44 +0100)
Issue #29174, #26741: subprocess.Popen.__del__() now keeps a strong reference
to warnings.warn() function.

Lib/subprocess.py

index 0b880f68d9120408f2ff4a9474a062a483198b19..13b9d44d31bbfa9711bc93fd36d2cb52db4111a0 100644 (file)
@@ -750,15 +750,15 @@ class Popen(object):
             # Wait for the process to terminate, to avoid zombies.
             self.wait()
 
-    def __del__(self, _maxsize=sys.maxsize):
+    def __del__(self, _maxsize=sys.maxsize, _warn=warnings.warn):
         if not self._child_created:
             # We didn't get to successfully create a child process.
             return
         if self.returncode is None:
             # Not reading subprocess exit status creates a zombi process which
             # is only destroyed at the parent python process exit
-            warnings.warn("subprocess %s is still running" % self.pid,
-                          ResourceWarning, source=self)
+            _warn("subprocess %s is still running" % self.pid,
+                  ResourceWarning, source=self)
         # In case the child hasn't been waited on, check if it's done.
         self._internal_poll(_deadstate=_maxsize)
         if self.returncode is None and _active is not None: