From: Ralf Habacker Date: Thu, 12 May 2016 22:56:42 +0000 (+0200) Subject: Eliminates a race condition accessing DBusBabysitter instance at startup of babysitte... X-Git-Tag: dbus-1.10.10~22 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a5c51278add34ea57e194c778efb478502578e8f;p=thirdparty%2Fdbus.git 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 --- diff --git a/dbus/dbus-spawn-win.c b/dbus/dbus-spawn-win.c index 804aa4269..fa2906386 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) {