From 94b6dfa24f84bd8854c1dc566413b0719dce9e0d Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sun, 16 May 2010 03:57:07 +0200 Subject: [PATCH] unit,job: when we suppress a D-Bus signal because nobody is listening, don't delay it until later --- dbus-job.c | 4 +++- dbus-unit.c | 4 +++- job.c | 5 +++++ manager.c | 2 +- unit.c | 7 ++++++- 5 files changed, 18 insertions(+), 4 deletions(-) diff --git a/dbus-job.c b/dbus-job.c index f14f92f9a..3a6e7159e 100644 --- a/dbus-job.c +++ b/dbus-job.c @@ -152,8 +152,10 @@ void bus_job_send_change_signal(Job *j) { LIST_REMOVE(Job, dbus_queue, j->manager->dbus_job_queue, j); j->in_dbus_queue = false; - if (set_isempty(j->manager->subscribed)) + if (set_isempty(j->manager->subscribed)) { + j->sent_dbus_new_signal = true; return; + } if (!(p = job_dbus_path(j))) goto oom; diff --git a/dbus-unit.c b/dbus-unit.c index ccaaef99a..0c311ea1a 100644 --- a/dbus-unit.c +++ b/dbus-unit.c @@ -348,8 +348,10 @@ void bus_unit_send_change_signal(Unit *u) { LIST_REMOVE(Meta, dbus_queue, u->meta.manager->dbus_unit_queue, &u->meta); u->meta.in_dbus_queue = false; - if (set_isempty(u->meta.manager->subscribed)) + if (set_isempty(u->meta.manager->subscribed)) { + u->meta.sent_dbus_new_signal = true; return; + } if (!(p = unit_dbus_path(u))) goto oom; diff --git a/job.c b/job.c index 1d59bcb27..887de92ca 100644 --- a/job.c +++ b/job.c @@ -541,6 +541,11 @@ void job_add_to_dbus_queue(Job *j) { if (j->in_dbus_queue) return; + if (set_isempty(j->manager->subscribed)) { + j->sent_dbus_new_signal = true; + return; + } + LIST_PREPEND(Job, dbus_queue, j->manager->dbus_job_queue, j); j->in_dbus_queue = true; } diff --git a/manager.c b/manager.c index 4cc7d30e2..767533484 100644 --- a/manager.c +++ b/manager.c @@ -57,7 +57,7 @@ #define GC_QUEUE_ENTRIES_MAX 16 /* As soon as 5s passed since a unit was added to our GC queue, make sure to run a gc sweep */ -#define GC_QUEUE_USEC_MAX (5*USEC_PER_SEC) +#define GC_QUEUE_USEC_MAX (10*USEC_PER_SEC) static int enable_special_signals(Manager *m) { char fd; diff --git a/unit.c b/unit.c index 1757af317..ee0c120b2 100644 --- a/unit.c +++ b/unit.c @@ -272,9 +272,14 @@ void unit_add_to_dbus_queue(Unit *u) { assert(u); assert(u->meta.type != _UNIT_TYPE_INVALID); - if (u->meta.load_state == UNIT_STUB || u->meta.in_dbus_queue || set_isempty(u->meta.manager->subscribed)) + if (u->meta.load_state == UNIT_STUB || u->meta.in_dbus_queue) return; + if (set_isempty(u->meta.manager->subscribed)) { + u->meta.sent_dbus_new_signal = true; + return; + } + LIST_PREPEND(Meta, dbus_queue, u->meta.manager->dbus_unit_queue, &u->meta); u->meta.in_dbus_queue = true; } -- 2.30.2