1 From 55c732acd013b6ac979b6e1f5432a301481879ca Mon Sep 17 00:00:00 2001
2 From: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
3 Date: Sun, 15 Aug 2010 22:56:49 +0100
4 Subject: [PATCH] Check if the deamon isn't already running
7 avahi-client/client.c | 29 +++++++++++++++++++++++++----
8 1 files changed, 25 insertions(+), 4 deletions(-)
10 diff --git a/avahi-client/client.c b/avahi-client/client.c
11 index be675ad..c7ece4a 100644
12 --- a/avahi-client/client.c
13 +++ b/avahi-client/client.c
14 @@ -478,6 +478,7 @@ static DBusConnection* avahi_dbus_bus_get(DBusError *error) {
15 AvahiClient *avahi_client_new(const AvahiPoll *poll_api, AvahiClientFlags flags, AvahiClientCallback callback, void *userdata, int *ret_error) {
16 AvahiClient *client = NULL;
18 + int daemon_running = 0;
22 @@ -560,12 +561,33 @@ AvahiClient *avahi_client_new(const AvahiPoll *poll_api, AvahiClientFlags flags,
23 if (dbus_error_is_set(&error))
26 - if (!dbus_bus_start_service_by_name(client->bus, AVAHI_DBUS_NAME, 0, NULL, &error)) {
28 - /* We free the error so its not set, that way the fail target
29 - * will return the NO_DAEMON error rather than a DBUS error */
30 + /* Check if the process already exists on the bus, otherwise try to start
32 + if (!dbus_bus_name_has_owner (client->bus, AVAHI_DBUS_NAME, &error)) {
33 + dbus_error_free(&error);
39 + if (!daemon_running &&
40 + !dbus_bus_start_service_by_name(client->bus,
41 + AVAHI_DBUS_NAME, 0, NULL, &error)) {
42 dbus_error_free(&error);
47 + /* Re-check something else didn't start the daemon */
48 + if (!daemon_running &&
49 + !dbus_bus_name_has_owner (client->bus, AVAHI_DBUS_NAME, &error)) {
50 + dbus_error_free(&error);
55 + if (!daemon_running) {
56 if (!(flags & AVAHI_CLIENT_NO_FAIL)) {
59 @@ -577,7 +599,6 @@ AvahiClient *avahi_client_new(const AvahiPoll *poll_api, AvahiClientFlags flags,
60 /* The user doesn't want this call to fail if the daemon is not
61 * available, so let's return succesfully */
62 client_set_state(client, AVAHI_CLIENT_CONNECTING);
66 if (init_server(client, ret_error) < 0)