When a previous call to poll() has already seen the process status,
wait() should not call waitpid() again.
Should be backported to 2.2.4.
diff --git a/Lib/popen2.py b/Lib/popen2.py
index d6ff002..8a17641 100644
--- a/Lib/popen2.py
+++ b/Lib/popen2.py
@@ -83,10 +83,11 @@
def wait(self):
"""Wait for and return the exit status of the child process."""
- pid, sts = os.waitpid(self.pid, 0)
- if pid == self.pid:
- self.sts = sts
- _active.remove(self)
+ if self.sts < 0:
+ pid, sts = os.waitpid(self.pid, 0)
+ if pid == self.pid:
+ self.sts = sts
+ _active.remove(self)
return self.sts