summaryrefslogtreecommitdiff
path: root/dbus
diff options
context:
space:
mode:
authorRalf Habacker <ralf.habacker@freenet.de>2016-05-13 00:56:42 +0200
committerRalf Habacker <ralf.habacker@freenet.de>2016-05-13 13:39:19 +0200
commita5c51278add34ea57e194c778efb478502578e8f (patch)
treeb8ac23a6fcc593e4b1411b0255e98cea7c1ce1dd /dbus
parent5ef167c1399499cf12d5800855cbe80f5b2439b6 (diff)
Eliminates a race condition accessing DBusBabysitter instance at startup of babysitter() on Windows.
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>
Diffstat (limited to 'dbus')
-rw-r--r--dbus/dbus-spawn-win.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/dbus/dbus-spawn-win.c b/dbus/dbus-spawn-win.c
index 804aa426..fa290638 100644
--- a/dbus/dbus-spawn-win.c
+++ b/dbus/dbus-spawn-win.c
@@ -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)
{