Why does
HANDLE mutexHandle = INVALID_HANDLE_VALUE;
WaitForSingleObject(mutexHandle, INFINITE);
block? It does not return with an error message. Checking the handle for INVALID_HANDLE
would be stupid for a mutex as I would need a mutex for accessing the mutex handle...
BTW: It does return with WAIT_FAILED
if the handle was closed.
From http://blogs.msdn.com/oldnewthing/archive/2004/03/02/82639.aspx:
Fourth, you have to be particularly careful with the
INVALID_HANDLE_VALUE
value: By coincidence, the valueINVALID_HANDLE_VALUE
happens to be numerically equal to the pseudohandle returned byGetCurrentProcess()
. Many kernel functions accept pseudohandles, so if if you mess up and accidentally call, say,WaitForSingleObject
on a failedINVALID_HANDLE_VALUE
handle, you will actually end up waiting on your own process. This wait will, of course, never complete, because a process is signalled when it exits, so you ended up waiting for yourself.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With