Are you sure that we should be acquiring the mutex in the open case?
MSDN says:
bInitialOwner
[in] Specifies the initial owner of the mutex object. If this
value is TRUE and the caller created the mutex, the calling thread
obtains ownership of the mutex object. Otherwise, the calling thread
does not obtain ownership of the mutex....
Thanks,
Joseph
hbirr(a)svn.reactos.com wrote:
If a mutex already exist, open it instead of create.
Modified: trunk/reactos/lib/kernel32/synch/mutex.c
Modified: trunk/reactos/lib/kernel32/synch/mutex.c
--- trunk/reactos/lib/kernel32/synch/mutex.c 2005-07-30 19:00:33
UTC (rev
16900)
+++ trunk/reactos/lib/kernel32/synch/mutex.c
2005-07-30 19:03:34
UTC (rev 16901)
@@ -92,10 +92,24 @@
MUTEX_ALL_ACCESS,
&ObjectAttributes,
(BOOLEAN)bInitialOwner);
+ if (Status == STATUS_OBJECT_NAME_COLLISION)
+ {
+ Status = NtOpenMutant(&MutantHandle,
+ MUTEX_ALL_ACCESS,
+ &ObjectAttributes);
+ if (NT_SUCCESS(Status))
+ {
+ if(bInitialOwner)
+ {
+ WaitForSingleObject(MutantHandle, INFINITE);
+ }
+ SetLastError(ERROR_ALREADY_EXISTS);
+ }
+ }
if (!NT_SUCCESS(Status))
{
- SetLastErrorByStatus(Status);
- return NULL;
+ SetLastErrorByStatus(Status);
+ return NULL;
}
return MutantHandle;