summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 );