summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-05-16 03:57:07 +0200
committerLennart Poettering <lennart@poettering.net>2010-05-16 03:57:07 +0200
commit94b6dfa24f84bd8854c1dc566413b0719dce9e0d (patch)
tree58036dab36657dce62b5926a103232b8a907dbdf
parentc1b94fda55e6e29e388a30f846b62650b5e60f7e (diff)
unit,job: when we suppress a D-Bus signal because nobody is listening, don't delay it until later
-rw-r--r--dbus-job.c4
-rw-r--r--dbus-unit.c4
-rw-r--r--job.c5
-rw-r--r--manager.c2
-rw-r--r--unit.c7
5 files changed, 18 insertions, 4 deletions
diff --git a/dbus-job.c b/dbus-job.c
index f14f92f9aa..3a6e7159e9 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 ccaaef99a2..0c311ea1a7 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 1d59bcb27f..887de92cad 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 4cc7d30e24..767533484e 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 1757af317d..ee0c120b24 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;
}