]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
Eliminates a race condition accessing DBusBabysitter instance at startup of babysitte...
authorRalf Habacker <ralf.habacker@freenet.de>
Thu, 12 May 2016 22:56:42 +0000 (00:56 +0200)
committerRalf Habacker <ralf.habacker@freenet.de>
Fri, 13 May 2016 11:39:19 +0000 (13:39 +0200)
Ensure that the babysitter thread already owns its one reference to the
babysitter when it starts up, and eliminates the race condition.
This patch requires that DBusBabysitter refcounting is thread-safe
and is based on an analysis and proposal of Simon Mc Vittie.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=95191
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
dbus/dbus-spawn-win.c

index 804aa4269e0030065deb51fec7c326db85866523..fa2906386f702e820d5cfa0a04abaf35a64ec7d6 100644 (file)
@@ -586,8 +586,6 @@ babysitter (void *parameter)
   DBusBabysitter *sitter = (DBusBabysitter *) parameter;
 
   PING();
-  _dbus_babysitter_ref (sitter);
-
   if (sitter->child_setup)
     {
       PING();
@@ -728,7 +726,7 @@ _dbus_spawn_async_with_babysitter (DBusBabysitter           **sitter_p,
 
   PING();
   sitter_thread = (HANDLE) CreateThread (NULL, 0, babysitter,
-                  sitter, 0, &sitter_thread_id);
+                  _dbus_babysitter_ref (sitter), 0, &sitter_thread_id);
 
   if (sitter_thread == 0)
     {