diff options
author | Ralf Habacker <ralf.habacker@freenet.de> | 2011-07-01 16:28:19 +0200 |
---|---|---|
committer | Ralf Habacker <ralf.habacker@freenet.de> | 2011-07-05 19:45:23 +0200 |
commit | 1fd58d6db4800904350009ad097ba3d7cce3ec6d (patch) | |
tree | 2f550d443db2c8c5b8d14c6b327b60f07b60d681 | |
parent | 0dcb9112519d43f00efd7d1f86981d12b25edbc5 (diff) | |
download | dbus-1fd58d6db4800904350009ad097ba3d7cce3ec6d.tar.gz |
win32 fix: Keep server autolaunch mutex settings according to client detection algorithmus.
-rw-r--r-- | dbus/dbus-sysdeps-win.c | 12 |
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 ); |