openbsd-ports/x11/dbus/patches/patch-dbus_dbus-sysdeps-unix_c
kurt c1c3b5b6db Prevent signal/waitpid races by blocking SIGCHLD in
_dbus_get_autolaunch_address(). This corrects the
pidgin + dbus plugin error dialog  "dbus: Failed to
get connection: Failed to execute dbus-launch to
autolaunch D-Bus session".

okay todd@
2009-04-24 15:06:05 +00:00

41 lines
1.2 KiB
Plaintext

$OpenBSD: patch-dbus_dbus-sysdeps-unix_c,v 1.1 2009/04/24 15:06:05 kurt Exp $
--- dbus/dbus-sysdeps-unix.c.orig Wed Apr 22 17:32:26 2009
+++ dbus/dbus-sysdeps-unix.c Wed Apr 22 18:56:49 2009
@@ -2860,6 +2860,7 @@ _dbus_get_autolaunch_address (DBusString *address,
int i;
DBusString uuid;
dbus_bool_t retval;
+ sigset_t new_set, old_set;
_DBUS_ASSERT_ERROR_IS_CLEAR (error);
retval = FALSE;
@@ -2869,6 +2870,10 @@ _dbus_get_autolaunch_address (DBusString *address,
_DBUS_SET_OOM (error);
return FALSE;
}
+
+ sigemptyset(&new_set);
+ sigaddset(&new_set, SIGCHLD);
+ sigprocmask(SIG_BLOCK, &new_set, &old_set);
if (!_dbus_get_local_machine_uuid_encoded (&uuid))
{
@@ -2963,6 +2968,8 @@ _dbus_get_autolaunch_address (DBusString *address,
for (i = 3; i < maxfds; i++)
close (i);
+ sigprocmask(SIG_SETMASK, &old_set, NULL);
+
execv (DBUS_BINDIR "/dbus-launch", argv);
/* failed, try searching PATH */
@@ -3021,6 +3028,8 @@ _dbus_get_autolaunch_address (DBusString *address,
retval = TRUE;
out:
+ sigprocmask(SIG_SETMASK, &old_set, NULL);
+
if (retval)
_DBUS_ASSERT_ERROR_IS_CLEAR (error);
else