]> granicus.if.org Git - python/commitdiff
Merged revisions 85315 via svnmerge from
authorHirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
Fri, 8 Oct 2010 09:41:13 +0000 (09:41 +0000)
committerHirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
Fri, 8 Oct 2010 09:41:13 +0000 (09:41 +0000)
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r85315 | hirokazu.yamamoto | 2010-10-08 17:38:15 +0900 | 1 line

  Issue #9978: Wait until subprocess completes initialization. (Win32KillTests in test_os)
........

Lib/test/test_os.py
Lib/test/win_console_handler.py
Misc/NEWS

index de1d06ea136d9edf76010176ad1a3db5d448136e..93cdb4ba863eb52ddad6f3ff8debc486aafa6149 100644 (file)
@@ -11,6 +11,8 @@ import signal
 import subprocess
 import time
 from test import test_support
+import mmap
+import uuid
 
 warnings.filterwarnings("ignore", "tempnam", RuntimeWarning, __name__)
 warnings.filterwarnings("ignore", "tmpnam", RuntimeWarning, __name__)
@@ -736,13 +738,23 @@ class Win32KillTests(unittest.TestCase):
         self._kill(100)
 
     def _kill_with_event(self, event, name):
+        tagname = "test_os_%s" % uuid.uuid1()
+        m = mmap.mmap(-1, 1, tagname)
+        m[0] = '0'
         # Run a script which has console control handling enabled.
         proc = subprocess.Popen([sys.executable,
                    os.path.join(os.path.dirname(__file__),
-                                "win_console_handler.py")],
+                                "win_console_handler.py"), tagname],
                    creationflags=subprocess.CREATE_NEW_PROCESS_GROUP)
         # Let the interpreter startup before we send signals. See #3137.
-        time.sleep(0.5)
+        count, max = 0, 20
+        while count < max and proc.poll() is None:
+            if m[0] == '0':
+                break
+            time.sleep(0.5)
+            count += 1
+        else:
+            self.fail("Subprocess didn't finish initialization")
         os.kill(proc.pid, event)
         # proc.send_signal(event) could also be done here.
         # Allow time for the signal to be passed and the process to exit.
index 3c2bfa15291c58a19fcdb5a4c48529116c4916de..0ffcee2e9147a8d86e357a43c8cdf578e053187c 100644 (file)
@@ -11,6 +11,8 @@ similar example in C.
 from ctypes import wintypes, WINFUNCTYPE
 import signal
 import ctypes
+import mmap
+import sys
 
 # Function prototype for the handler function. Returns BOOL, takes a DWORD.
 HandlerRoutine = WINFUNCTYPE(wintypes.BOOL, wintypes.DWORD)
@@ -38,6 +40,10 @@ if __name__ == "__main__":
         print("Unable to add SetConsoleCtrlHandler")
         exit(-1)
 
+    # Awaken mail process
+    m = mmap.mmap(-1, 1, sys.argv[1])
+    m[0] = '1'
+
     # Do nothing but wait for the signal
     while True:
         pass
index f3bf12958660121f27b4652f3ad3dee1c0b26bd3..ef981f379b01528ddc1e11962f7f7189507b85e3 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -403,6 +403,9 @@ Build
 Tests
 -----
 
+- Issue #9978: Wait until subprocess completes initialization. (Win32KillTests
+  in test_os)
+
 - Issue #9894: Do not hardcode ENOENT in test_subprocess.
 
 - Issue #9323: Make test.regrtest.__file__ absolute, this was not always the