Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 534
EricSchaefer Avatar asked Sep 24 '09 13:09

EricSchaefer


1 Answers

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.

like image 130
Cat Plus Plus Avatar answered Sep 20 '22 12:09

Cat Plus Plus