EricSchaefer
EricSchaefer

Reputation: 26330

Why does WaitForSingleObject(INVALID_HANDLE_VALUE, INFINITE) block?

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.

Upvotes: 8

Views: 3020

Answers (1)

Cat Plus Plus
Cat Plus Plus

Reputation: 129754

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 value INVALID_HANDLE_VALUE happens to be numerically equal to the pseudohandle returned by GetCurrentProcess(). Many kernel functions accept pseudohandles, so if if you mess up and accidentally call, say, WaitForSingleObject on a failed INVALID_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.

Upvotes: 19

Related Questions