diff options
author | Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp> | 2010-10-08 09:41:13 (GMT) |
---|---|---|
committer | Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp> | 2010-10-08 09:41:13 (GMT) |
commit | 1f504f1d7a852d5eb127b6378ce5e861a3551b3b (patch) | |
tree | fa57493a819f879c9b0220f07cd8b356f23f0b7f | |
parent | 354fe7e38148741d93ad2184b5c232b142bf6ac8 (diff) | |
download | cpython-1f504f1d7a852d5eb127b6378ce5e861a3551b3b.zip cpython-1f504f1d7a852d5eb127b6378ce5e861a3551b3b.tar.gz cpython-1f504f1d7a852d5eb127b6378ce5e861a3551b3b.tar.bz2 |
Merged revisions 85315 via svnmerge from
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)
........
-rw-r--r-- | Lib/test/test_os.py | 16 | ||||
-rw-r--r-- | Lib/test/win_console_handler.py | 6 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
3 files changed, 23 insertions, 2 deletions
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index de1d06e..93cdb4b 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -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. diff --git a/Lib/test/win_console_handler.py b/Lib/test/win_console_handler.py index 3c2bfa1..0ffcee2 100644 --- a/Lib/test/win_console_handler.py +++ b/Lib/test/win_console_handler.py @@ -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 @@ -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 |