Re: Mutex question
On 30 Jul 2007 21:19:29 -0400, Vincent Fatica <vince@blackholespam.net>
wrote:
An app loads my DLL and calls an initialization routine therein. That routine
contains (essentially)
if ( !OpenMutex(0, FALSE, "MyMutex") )
{
// do some stuff
CreateMutex(NULL, FALSE, "MyMutex");
}
The app unloads my DLL. [The open handle to "MyMutex" remains, according to
SysInternals's ProcessExplorer.]
If the same instance of the app later loads my DLL (again) and calls its
initialization routine, OpenMutex() fails and "some stuff" is done again (which
is what I'm trying to avoid).
Why does OpenMutex() fail the second time around?
I dunno; what does GetLastError say?
Is there a (better) way for my DLL to "leave a mark" so that after it has been
unloaded, an instance loaded in the future will know it had been loaded/unloaded
previously?
The OpenMutex/CreateMutex sequence creates a race condition, as two
simultaneous callers could find themselves unable to open the mutex and
thus both try to create it. You should simply use CreateMutex; GetLastError
will tell you if the mutex was created or merely opened.
--
Doug Harrison
Visual C++ MVP