win32 fix: Keep server autolaunch mutex settings according to client detection algori...
authorRalf Habacker <ralf.habacker@freenet.de>
Fri, 1 Jul 2011 14:28:19 +0000 (16:28 +0200)
committerRalf Habacker <ralf.habacker@freenet.de>
Fri, 1 Jul 2011 14:28:19 +0000 (16:28 +0200)
dbus/dbus-sysdeps-win.c

index 19f6fa0b67a94c6cd548344218d6e798d13553ad..7b03c3ddf686e2d3599c1a2371bca4a7be3981e1 100644 (file)
@@ -2639,6 +2639,10 @@ _dbus_daemon_is_session_bus_address_published (const char *scope)
   // see http://msdn.microsoft.com/en-us/library/ms684315%28VS.85%29.aspx
   hDBusDaemonMutex = CreateMutexA( NULL, FALSE, _dbus_string_get_const_data(&mutex_name) );
 
+  /* The client uses mutex ownership to detect a running server, so the server should do so too.
+     Fortunally the client deletes the mutex in the lock protected area, so checking presence 
+     will work too.  */
+
   _dbus_global_unlock( lock );
 
   _dbus_string_free( &mutex_name );
@@ -2684,6 +2688,14 @@ _dbus_daemon_publish_session_bus_address (const char* address, const char *scope
     }
   _dbus_string_free( &mutex_name );
 
+  // acquire the mutex
+  if (WaitForSingleObject( hDBusDaemonMutex, 10 ) != WAIT_OBJECT_0)
+    {
+      _dbus_global_unlock( lock );
+      CloseHandle( hDBusDaemonMutex );
+      return FALSE;
+    }
+
   if (!_dbus_get_shm_name(&shm_name,scope))
     {
       _dbus_string_free( &shm_name );