unit,job: when we suppress a D-Bus signal because nobody is listening, don't delay it until later

This commit is contained in:
Lennart Poettering 2010-05-16 03:57:07 +02:00
parent c1b94fda55
commit 94b6dfa24f
5 changed files with 18 additions and 4 deletions

View File

@ -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;

View File

@ -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;

5
job.c
View File

@ -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;
}

View File

@ -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;

7
unit.c
View File

@ -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;
}