Index: common/dbus.c =================================================================== RCS file: /cvsroot/bluez/utils/common/dbus.c,v retrieving revision 1.2 diff -u -p -r1.2 dbus.c --- common/dbus.c 13 Nov 2006 07:58:40 -0000 1.2 +++ common/dbus.c 8 Jan 2007 22:52:18 -0000 @@ -39,6 +39,7 @@ #include "list.h" #define DISPATCH_TIMEOUT 0 +#define MAX_DBUS_RETRY 12 static int name_listener_initialized = 0; @@ -485,13 +486,27 @@ static void dispatch_status_cb(DBusConne DBusConnection *init_dbus(const char *name, void (*disconnect_cb)(void *), void *user_data) { + int retry = 0; struct disconnect_data *dc_data; DBusConnection *conn; DBusError err; dbus_error_init(&err); - conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err); + do { + if (dbus_error_is_set(&err)) + dbus_error_free(&err); + + conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err); + if (conn) + break; + + if (!retry) + info("Can't connect to DBUS. Will retry %i times.", MAX_DBUS_RETRY); + + usleep(5000000); + retry++; + } while (!conn && retry < MAX_DBUS_RETRY); if (dbus_error_is_set(&err)) { error("Can't connect to system message bus: %s", err.message);