From a3ce3b1c71c8cbade35f02d9d172fbb0c230fbc6 Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Mon, 2 Mar 2009 11:13:37 +0000 Subject: [PATCH] * qemud/qemud.c src/node_device_hal.c: activate DBus multithreading to avoid random crashes in the daemon, patch by Daniel Berrange Daniel --- ChangeLog | 5 +++++ qemud/qemud.c | 5 +++++ src/node_device_hal.c | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/ChangeLog b/ChangeLog index 2abfa327ce..d4c583c9e2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon Mar 2 12:12:11 CET 2009 Daniel Veillard + + * qemud/qemud.c src/node_device_hal.c: activate DBus multithreading + to avoid random crashes in the daemon, patch by Daniel Berrange + Mon Mar 2 10:16:04 +0100 2009 Jim Meyering correct a typo in a diagnostic diff --git a/qemud/qemud.c b/qemud/qemud.c index 6df636870d..e8528417f4 100644 --- a/qemud/qemud.c +++ b/qemud/qemud.c @@ -911,6 +911,10 @@ static struct qemud_server *qemudNetworkInit(struct qemud_server *server) { if (auth_unix_rw == REMOTE_AUTH_POLKIT || auth_unix_ro == REMOTE_AUTH_POLKIT) { DBusError derr; + + dbus_connection_set_change_sigpipe(FALSE); + dbus_threads_init_default(); + dbus_error_init(&derr); server->sysbus = dbus_bus_get(DBUS_BUS_SYSTEM, &derr); if (!(server->sysbus)) { @@ -919,6 +923,7 @@ static struct qemud_server *qemudNetworkInit(struct qemud_server *server) { dbus_error_free(&derr); goto cleanup; } + dbus_connection_set_exit_on_disconnect(server->sysbus, FALSE); } #endif diff --git a/src/node_device_hal.c b/src/node_device_hal.c index cb4f86b14e..2a46088922 100644 --- a/src/node_device_hal.c +++ b/src/node_device_hal.c @@ -685,6 +685,9 @@ static int halDeviceMonitorStartup(void) nodeDeviceLock(driverState); /* Allocate and initialize a new HAL context */ + dbus_connection_set_change_sigpipe(FALSE); + dbus_threads_init_default(); + dbus_error_init(&err); hal_ctx = libhal_ctx_new(); if (hal_ctx == NULL) { @@ -696,6 +699,8 @@ static int halDeviceMonitorStartup(void) fprintf(stderr, "%s: dbus_bus_get failed\n", __FUNCTION__); goto failure; } + dbus_connection_set_exit_on_disconnect(dbus_conn, FALSE); + if (!libhal_ctx_set_dbus_connection(hal_ctx, dbus_conn)) { fprintf(stderr, "%s: libhal_ctx_set_dbus_connection failed\n", __FUNCTION__);