From 138321d54c11376cabd40d8fb211941508ad5778 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 28 Jan 2010 21:03:42 -0800 Subject: In the timeout function mention that we're shutting down, and have an environment variable to stop that. --- libindicator/indicator-service.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libindicator/indicator-service.c b/libindicator/indicator-service.c index e2ec6b2..ccb56d5 100644 --- a/libindicator/indicator-service.c +++ b/libindicator/indicator-service.c @@ -316,7 +316,12 @@ get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspe static gboolean timeout_no_watchers (gpointer data) { - g_signal_emit(G_OBJECT(data), signals[SHUTDOWN], 0, TRUE); + g_warning("No watchers, service timing out."); + if (g_getenv("INDICATOR_ALLOW_NO_WATCHERS") == NULL) { + g_signal_emit(G_OBJECT(data), signals[SHUTDOWN], 0, TRUE); + } else { + g_warning("\tblocked by environment variable."); + } return FALSE; } -- cgit v1.2.3 From 21eca67f89870abd114f9ccc3ae04e7fd53189b1 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 28 Jan 2010 21:07:54 -0800 Subject: checking the error field for name callback and printing an error when it fails. --- libindicator/indicator-service.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libindicator/indicator-service.c b/libindicator/indicator-service.c index ccb56d5..eee95dd 100644 --- a/libindicator/indicator-service.c +++ b/libindicator/indicator-service.c @@ -334,10 +334,17 @@ try_and_get_name_cb (DBusGProxy * proxy, guint status, GError * error, gpointer IndicatorService * service = INDICATOR_SERVICE(data); g_return_if_fail(service != NULL); + if (error != NULL) { + g_warning("Unable to send message to request name: %s", error->message); + g_signal_emit(G_OBJECT(data), signals[SHUTDOWN], 0, TRUE); + return; + } + if (status != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER && status != DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER) { /* The already owner seems like it shouldn't ever happen, but I have a hard time throwing an error on it as we did achieve our goals. */ + g_warning("Name request failed. Status returned: %d", status); g_signal_emit(G_OBJECT(data), signals[SHUTDOWN], 0, TRUE); return; } -- cgit v1.2.3 From 52e1a43bd957bac1020d58134ab659553af7c4eb Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 28 Jan 2010 21:23:18 -0800 Subject: Changing timeout to be approximatedly 1 second. --- libindicator/indicator-service.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libindicator/indicator-service.c b/libindicator/indicator-service.c index eee95dd..fc3c7de 100644 --- a/libindicator/indicator-service.c +++ b/libindicator/indicator-service.c @@ -350,7 +350,7 @@ try_and_get_name_cb (DBusGProxy * proxy, guint status, GError * error, gpointer } IndicatorServicePrivate * priv = INDICATOR_SERVICE_GET_PRIVATE(service); - priv->timeout = g_timeout_add(500, timeout_no_watchers, service); + priv->timeout = g_timeout_add_seconds(1, timeout_no_watchers, service); return; } -- cgit v1.2.3 From 1abf840d1c71c3aca0e4ec19a6c5c65a10da0413 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 28 Jan 2010 21:31:45 -0800 Subject: Error handling when building our proxies. --- libindicator/indicator-service-manager.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/libindicator/indicator-service-manager.c b/libindicator/indicator-service-manager.c index 7bb9a9b..47765da 100644 --- a/libindicator/indicator-service-manager.c +++ b/libindicator/indicator-service-manager.c @@ -397,6 +397,15 @@ start_service_cb (DBusGProxy * proxy, guint status, GError * error, gpointer use INDICATOR_SERVICE_OBJECT, INDICATOR_SERVICE_INTERFACE, &error); + + if (error != NULL || priv->service_proxy == NULL) { + g_warning("Unable to create service proxy on '%s': %s", priv->name, error == NULL ? "(null)" : error->message); + priv->service_proxy = NULL; /* Should be already, but we want to be *really* sure. */ + g_error_free(error); + start_service_again(INDICATOR_SERVICE_MANAGER(user_data)); + return; + } + g_object_add_weak_pointer(G_OBJECT(priv->service_proxy), (gpointer *)&(priv->service_proxy)); g_signal_connect(G_OBJECT(priv->service_proxy), "destroy", G_CALLBACK(service_proxy_destroyed), user_data); @@ -432,7 +441,7 @@ start_service (IndicatorServiceManager * service) INDICATOR_SERVICE_INTERFACE, &error); - if (error != NULL) { + if (error != NULL || priv->service_proxy == NULL) { /* We don't care about the error, just start the service anyway. */ g_error_free(error); org_freedesktop_DBus_start_service_by_name_async (priv->dbus_proxy, -- cgit v1.2.3 From 7c5818518d3bd0500c28ea42f0226fa40f066a94 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 28 Jan 2010 21:39:29 -0800 Subject: Adding a debug message for restarting the service. --- libindicator/indicator-service-manager.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libindicator/indicator-service-manager.c b/libindicator/indicator-service-manager.c index 47765da..20eddec 100644 --- a/libindicator/indicator-service-manager.c +++ b/libindicator/indicator-service-manager.c @@ -485,6 +485,7 @@ start_service_again_cb (gpointer data) { IndicatorServiceManagerPrivate * priv = INDICATOR_SERVICE_MANAGER_GET_PRIVATE(data); priv->restart_count++; + g_debug("Restarting service '%s' count %d", priv->name, priv->restart_count); start_service(INDICATOR_SERVICE_MANAGER(data)); priv->restart_source = 0; return FALSE; -- cgit v1.2.3