--- a/tests/killdaemons.py Tue Feb 11 01:15:07 2014 +0100
+++ b/tests/killdaemons.py Fri Jan 17 21:13:08 2014 +0100
@@ -4,13 +4,30 @@
if os.name =='nt':
import ctypes
+
+ def _check(ret, expectederr=None):
+ if ret == 0:
+ winerrno = ctypes.GetLastError()
+ if winerrno == expectederr:
+ return True
+ raise ctypes.WinError(winerrno)
+
def kill(pid, logfn, tryhard=True):
logfn('# Killing daemon process %d' % pid)
PROCESS_TERMINATE = 1
handle = ctypes.windll.kernel32.OpenProcess(
PROCESS_TERMINATE, False, pid)
- ctypes.windll.kernel32.TerminateProcess(handle, -1)
- ctypes.windll.kernel32.CloseHandle(handle)
+ if handle == 0:
+ # TODO: call _check(0, expected) to check if "process not found"
+ return # process not found, already finished
+ try:
+ _check(ctypes.windll.kernel32.TerminateProcess(handle, -1), 5)
+ # windows error 5 when process does not exist or no access TODO
+ except: #re-raises
+ ctypes.windll.kernel32.CloseHandle(handle) # no _check, keep error
+ raise
+ _check(ctypes.windll.kernel32.CloseHandle(handle))
+
else:
def kill(pid, logfn, tryhard=True):
try: