X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fbusname.c;h=0d19311db178af7c9765f25d2c32ffc0aba9ef84;hb=7b52a628f8b43ba521c302a7f32bccf9d0dc8bfd;hp=c45265658c21468c30cba21c0cee089446aebd97;hpb=e821075a23fdfa3ca7738fc30bb2d4c430fe10c0;p=elogind.git diff --git a/src/core/busname.c b/src/core/busname.c index c45265658..0d19311db 100644 --- a/src/core/busname.c +++ b/src/core/busname.c @@ -197,6 +197,8 @@ static void busname_unwatch_fd(BusName *n) { static void busname_close_fd(BusName *n) { assert(n); + busname_unwatch_fd(n); + if (n->starter_fd <= 0) return; @@ -333,6 +335,11 @@ static void busname_enter_running(BusName *n) { if (unit_stop_pending(UNIT(n))) { log_debug_unit(UNIT(n)->id, "Suppressing activation request on %s since unit stop is scheduled.", UNIT(n)->id); + + /* Flush all queued activation reqeuest by closing and reopening the connection */ + bus_kernel_drop_one(n->starter_fd); + + busname_enter_listening(n); return; } @@ -519,18 +526,13 @@ static void busname_trigger_notify(Unit *u, Unit *other) { s = SERVICE(other); - if (s->state == SERVICE_FAILED) { - if (s->result == SERVICE_FAILURE_START_LIMIT) - busname_enter_dead(n, BUSNAME_FAILURE_SERVICE_FAILED_PERMANENT); - else - busname_enter_listening(n); - } - - if (IN_SET(n->state, - SERVICE_DEAD, - SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, - SERVICE_STOP_POST, SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL, - SERVICE_AUTO_RESTART)) + if (s->state == SERVICE_FAILED && s->result == SERVICE_FAILURE_START_LIMIT) + busname_enter_dead(n, BUSNAME_FAILURE_SERVICE_FAILED_PERMANENT); + else if (IN_SET(s->state, + SERVICE_DEAD, SERVICE_FAILED, + SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, + SERVICE_STOP_POST, SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL, + SERVICE_AUTO_RESTART)) busname_enter_listening(n); } @@ -582,7 +584,6 @@ const UnitVTable busname_vtable = { .bus_interface = "org.freedesktop.systemd1.BusName", .bus_vtable = bus_busname_vtable, - .bus_changing_properties = bus_busname_changing_properties, .status_message_formats = { .finished_start_job = {