aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastien Bacher <seb128@ubuntu.com>2010-02-04 19:00:38 -0800
committerSebastien Bacher <seb128@ubuntu.com>2010-02-04 19:00:38 -0800
commit050ef48d22ce3f4626eb11867fea14f0e8a0854e (patch)
treeed69171d22fa26aa06fd91feefacef1f9fd69974
parent717a085c50ac2e0b93ca9c79fdcf954eb9e253f6 (diff)
parent72ef75fa51c63e533ff2883bffc75bfc86a2c521 (diff)
downloadlibayatana-indicator-0.3.2-0ubuntu1.tar.gz
libayatana-indicator-0.3.2-0ubuntu1.tar.bz2
libayatana-indicator-0.3.2-0ubuntu1.zip
releasing version 0.3.2-0ubuntu10.3.2-0ubuntu1
-rw-r--r--configure.ac4
-rw-r--r--debian/changelog9
-rw-r--r--libindicator/indicator-service-manager.c12
-rw-r--r--libindicator/indicator-service.c16
-rw-r--r--tests/Makefile.am6
-rw-r--r--tests/run-xvfb.sh8
-rw-r--r--tests/service-shutdown-timeout.c2
7 files changed, 50 insertions, 7 deletions
diff --git a/configure.ac b/configure.ac
index 1f0ad9a..a816206 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,10 +1,10 @@
-AC_INIT(libindicator, 0.3.1, ted@canonical.com)
+AC_INIT(libindicator, 0.3.2, ted@canonical.com)
AC_PREREQ(2.53)
AM_CONFIG_HEADER(config.h)
-AM_INIT_AUTOMAKE(libindicator, 0.3.1)
+AM_INIT_AUTOMAKE(libindicator, 0.3.2)
AM_MAINTAINER_MODE
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES])
diff --git a/debian/changelog b/debian/changelog
index c26b70f..fd1e0eb 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+libindicator (0.3.2-0ubuntu1) lucid; urgency=low
+
+ * Upstream release 0.3.2
+ * Various fixes to timeout handling in services and the
+ service manager.
+ * Fix test suite when run headless
+
+ -- Ted Gould <ted@ubuntu.com> Thu, 04 Feb 2010 17:40:06 -0800
+
libindicator (0.3.1-0ubuntu1) lucid; urgency=low
* Upstream release 0.3.1
diff --git a/libindicator/indicator-service-manager.c b/libindicator/indicator-service-manager.c
index 7bb9a9b..20eddec 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,
@@ -476,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;
diff --git a/libindicator/indicator-service.c b/libindicator/indicator-service.c
index e2ec6b2..fc3c7de 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;
}
@@ -329,16 +334,23 @@ 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;
}
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;
}
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 7fcccb6..b111655 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -10,6 +10,9 @@ lib_LTLIBRARIES = \
libdummy-indicator-simple.la
DBUS_RUNNER=dbus-test-runner --dbus-config /usr/share/dbus-test-runner/session.conf
+XVFB_RUN=". $(srcdir)/run-xvfb.sh"
+
+EXTRA_DIST = run-xvfb.sh
#############################
# Test Loader
@@ -297,7 +300,8 @@ XML_REPORT = loader-check-results.xml
HTML_REPORT = loader-check-results.html
loader-tester: test-loader libdummy-indicator-null.la libdummy-indicator-simple.la Makefile
- @echo "#!/bin/sh" > loader-tester
+ @echo "#!/bin/bash" > loader-tester
+ @echo $(XVFB_RUN) >> $@
@echo gtester -k --verbose -o=$(XML_REPORT) ./test-loader >> loader-tester
@chmod +x loader-tester
diff --git a/tests/run-xvfb.sh b/tests/run-xvfb.sh
new file mode 100644
index 0000000..63b6f0d
--- /dev/null
+++ b/tests/run-xvfb.sh
@@ -0,0 +1,8 @@
+if [ "$DISPLAY" == "" ]; then
+Xvfb -ac -noreset -screen 0 800x600x16 -help 2>/dev/null 1>&2
+XID=`for id in 101 102 103 104 105 106 107 197 199 211 223 227 293 307 308 309 310 311 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 4703 4721 4723 4729 4733 4751 9973 9974 9975 9976 9977 9978 9979 9980 9981 9982 9983 9984 9985 9986 9987 9988 9989 9990 9991 9992 9993 9994 9995 9996 9997 9998 9999 ; do test -e /tmp/.X$id-lock || { echo $id; exit 0; }; done; exit 1`
+{ Xvfb -ac -noreset -screen 0 800x600x16 :$XID -screen 0 800x600x16 -nolisten tcp -auth /dev/null >/dev/null 2>&1 & trap "kill -15 $! " 0 HUP INT QUIT TRAP USR1 PIPE TERM ; } || { echo "Gtk+Tests:ERROR: Failed to start Xvfb environment for X11 target tests."; exit 1; }
+DISPLAY=:$XID
+export DISPLAY
+echo Setting display: $DISPLAY
+fi
diff --git a/tests/service-shutdown-timeout.c b/tests/service-shutdown-timeout.c
index 666739a..820441c 100644
--- a/tests/service-shutdown-timeout.c
+++ b/tests/service-shutdown-timeout.c
@@ -31,7 +31,7 @@ main (int argc, char ** argv)
IndicatorService * is = indicator_service_new("my.test.name");
g_signal_connect(G_OBJECT(is), INDICATOR_SERVICE_SIGNAL_SHUTDOWN, shutdown, NULL);
- g_timeout_add_seconds(1, timeout, NULL);
+ g_timeout_add_seconds(2, timeout, NULL);
mainloop = g_main_loop_new(NULL, FALSE);
g_main_loop_run(mainloop);