If a mutex already exist, open it instead of create.
authorHartmut Birr <osexpert@googlemail.com>
Sat, 30 Jul 2005 19:03:34 +0000 (19:03 +0000)
committerHartmut Birr <osexpert@googlemail.com>
Sat, 30 Jul 2005 19:03:34 +0000 (19:03 +0000)
svn path=/trunk/; revision=16901

reactos/lib/kernel32/synch/mutex.c

index 854901d..9752796 100644 (file)
@@ -92,10 +92,24 @@ CreateMutexW(LPSECURITY_ATTRIBUTES lpMutexAttributes,
                           MUTEX_ALL_ACCESS,
                           &ObjectAttributes,
                           (BOOLEAN)bInitialOwner);
                           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))
      {
    if (!NT_SUCCESS(Status))
      {
-       SetLastErrorByStatus(Status);
-       return NULL;
+       SetLastErrorByStatus(Status);
+       return NULL;
      }
 
    return MutantHandle;
      }
 
    return MutantHandle;