summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRalf Habacker <ralf.habacker@freenet.de>2011-07-01 16:28:19 +0200
committerRalf Habacker <ralf.habacker@freenet.de>2011-07-05 19:45:23 +0200
commit1fd58d6db4800904350009ad097ba3d7cce3ec6d (patch)
tree2f550d443db2c8c5b8d14c6b327b60f07b60d681
parent0dcb9112519d43f00efd7d1f86981d12b25edbc5 (diff)
downloaddbus-1fd58d6db4800904350009ad097ba3d7cce3ec6d.tar.gz
win32 fix: Keep server autolaunch mutex settings according to client detection algorithmus.
-rw-r--r--dbus/dbus-sysdeps-win.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/dbus/dbus-sysdeps-win.c b/dbus/dbus-sysdeps-win.c
index 19f6fa0b..7b03c3dd 100644
--- a/dbus/dbus-sysdeps-win.c
+++ b/dbus/dbus-sysdeps-win.c
@@ -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 );