[Python-checkins] r85315 - in python/branches/py3k: Lib/test/test_os.py Lib/test/win_console_handler.py Misc/NEWS

hirokazu.yamamoto python-checkins at python.org
Fri Oct 8 10:38:15 CEST 2010


Author: hirokazu.yamamoto
Date: Fri Oct  8 10:38:15 2010
New Revision: 85315

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

Modified:
   python/branches/py3k/Lib/test/test_os.py
   python/branches/py3k/Lib/test/win_console_handler.py
   python/branches/py3k/Misc/NEWS

Modified: python/branches/py3k/Lib/test/test_os.py
==============================================================================
--- python/branches/py3k/Lib/test/test_os.py	(original)
+++ python/branches/py3k/Lib/test/test_os.py	Fri Oct  8 10:38:15 2010
@@ -13,6 +13,8 @@
 import shutil
 from test import support
 import contextlib
+import mmap
+import uuid
 
 # Detect whether we're on a Linux system that uses the (now outdated
 # and unmaintained) linuxthreads threading library.  There's an issue
@@ -1029,13 +1031,23 @@
         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.

Modified: python/branches/py3k/Lib/test/win_console_handler.py
==============================================================================
--- python/branches/py3k/Lib/test/win_console_handler.py	(original)
+++ python/branches/py3k/Lib/test/win_console_handler.py	Fri Oct  8 10:38:15 2010
@@ -11,6 +11,8 @@
 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 @@
         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

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Fri Oct  8 10:38:15 2010
@@ -311,6 +311,9 @@
 Tests
 -----
 
+- Issue #9978: Wait until subprocess completes initialization. (Win32KillTests
+  in test_os)
+
 - Issue #7110: regrtest now sends test failure reports and single-failure
   tracebacks to stderr rather than stdout.
 


More information about the Python-checkins mailing list