Skip to content
Snippets Groups Projects
Commit ed1f376090cd authored by Matt Harbison's avatar Matt Harbison
Browse files

killdaemons: fix WaitForSingleObject() error handling logic on Windows

The error return is not 0 for this method, so _check() was doing nothing when an
error occurred.  This forces the error path, much like the check for
OpenProcess().

The only unhandled return is now WAIT_ABANDONED, but I don't see how that could
happen in this case.
parent d644e859d9da
No related branches found
No related tags found
No related merge requests found
......@@ -44,6 +44,7 @@
SYNCHRONIZE = 0x00100000
WAIT_OBJECT_0 = 0
WAIT_TIMEOUT = 258
WAIT_FAILED = _DWORD(0xFFFFFFFF).value
handle = ctypes.windll.kernel32.OpenProcess(
PROCESS_TERMINATE|SYNCHRONIZE|PROCESS_QUERY_INFORMATION,
False, pid)
......@@ -56,8 +57,8 @@
pass # terminated, but process handle still available
elif r == WAIT_TIMEOUT:
_check(ctypes.windll.kernel32.TerminateProcess(handle, -1))
else:
_check(r)
elif r == WAIT_FAILED:
_check(0) # err stored in GetLastError()
# TODO?: forcefully kill when timeout
# and ?shorter waiting time? when tryhard==True
......@@ -67,8 +68,8 @@
pass # process is terminated
elif r == WAIT_TIMEOUT:
logfn('# Daemon process %d is stuck')
else:
_check(r) # any error
elif r == WAIT_FAILED:
_check(0) # err stored in GetLastError()
except: #re-raises
ctypes.windll.kernel32.CloseHandle(handle) # no _check, keep error
raise
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment