mirror of
https://github.com/systemd/systemd.git
synced 2024-10-28 03:25:31 +03:00
logind: don't busy loop if a job is still running but the delay timeout expires
This commit is contained in:
parent
391a4f7242
commit
842865365e
@ -218,7 +218,7 @@ const DBusObjectPathVTable bus_job_vtable = {
|
||||
};
|
||||
|
||||
static int job_send_message(Job *j, DBusMessage* (*new_message)(Job *j)) {
|
||||
DBusMessage *m = NULL;
|
||||
_cleanup_dbus_message_unref_ DBusMessage *m = NULL;
|
||||
int r;
|
||||
|
||||
assert(j);
|
||||
@ -227,9 +227,9 @@ static int job_send_message(Job *j, DBusMessage* (*new_message)(Job *j)) {
|
||||
if (bus_has_subscriber(j->manager) || j->forgot_bus_clients) {
|
||||
m = new_message(j);
|
||||
if (!m)
|
||||
goto oom;
|
||||
return -ENOMEM;
|
||||
|
||||
r = bus_broadcast(j->manager, m);
|
||||
dbus_message_unref(m);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
@ -238,18 +238,19 @@ static int job_send_message(Job *j, DBusMessage* (*new_message)(Job *j)) {
|
||||
* to the client(s) which created the job */
|
||||
JobBusClient *cl;
|
||||
assert(j->bus_client_list);
|
||||
|
||||
LIST_FOREACH(client, cl, j->bus_client_list) {
|
||||
assert(cl->bus);
|
||||
|
||||
m = new_message(j);
|
||||
if (!m)
|
||||
goto oom;
|
||||
return -ENOMEM;
|
||||
|
||||
if (!dbus_message_set_destination(m, cl->name))
|
||||
goto oom;
|
||||
return -ENOMEM;
|
||||
|
||||
if (!dbus_connection_send(cl->bus, m, NULL))
|
||||
goto oom;
|
||||
return -ENOMEM;
|
||||
|
||||
dbus_message_unref(m);
|
||||
m = NULL;
|
||||
@ -257,10 +258,6 @@ static int job_send_message(Job *j, DBusMessage* (*new_message)(Job *j)) {
|
||||
}
|
||||
|
||||
return 0;
|
||||
oom:
|
||||
if (m)
|
||||
dbus_message_unref(m);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
static DBusMessage* new_change_signal_message(Job *j) {
|
||||
|
@ -2400,7 +2400,6 @@ DBusHandlerResult bus_message_filter(
|
||||
log_error("Failed to parse JobRemoved message: %s", bus_error_message(&error));
|
||||
|
||||
else if (m->action_job && streq(m->action_job, path)) {
|
||||
|
||||
log_info("Operation finished.");
|
||||
|
||||
/* Tell people that they now may take a lock again */
|
||||
@ -2441,7 +2440,7 @@ int manager_dispatch_delayed(Manager *manager) {
|
||||
|
||||
assert(manager);
|
||||
|
||||
if (!manager->action_unit || manager->action_job)
|
||||
if (manager->action_what == 0 || manager->action_job)
|
||||
return 0;
|
||||
|
||||
/* Continue delay? */
|
||||
|
@ -1626,7 +1626,7 @@ int manager_run(Manager *m) {
|
||||
|
||||
manager_gc(m, true);
|
||||
|
||||
if (m->action_what != 0) {
|
||||
if (m->action_what != 0 && !m->action_job) {
|
||||
usec_t x, y;
|
||||
|
||||
x = now(CLOCK_MONOTONIC);
|
||||
|
Loading…
Reference in New Issue
Block a user