summaryrefslogtreecommitdiff
path: root/dbus/dbus-spawn-win.c
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/dbus-spawn-win.c
parent5ef167c1399499cf12d5800855cbe80f5b2439b6 (diff)
downloaddbus-a5c51278add34ea57e194c778efb478502578e8f.tar.gz
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/dbus-spawn-win.c')
-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)
{