summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2013-12-16 21:26:21 +0100
committerLennart Poettering <lennart@poettering.net>2013-12-16 21:26:21 +0100
commit16ac401407959cbc62312e61c2dd76dbc3a0793b (patch)
treea03ee897a4d4b5932ec46e3b01ce8c966c784084
parent010b2b8d7a694e1e404e35db90e938f6a476bf2f (diff)
bus: when a busname unit refuses to activate a service it should flush the queue
-rw-r--r--src/core/busname.c7
-rw-r--r--src/core/socket.c7
2 files changed, 14 insertions, 0 deletions
diff --git a/src/core/busname.c b/src/core/busname.c
index 49a43feb37..034e5f60d1 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 */
+
+ busname_close_fd(n);
+ busname_enter_listening(n);
return;
}
diff --git a/src/core/socket.c b/src/core/socket.c
index aaaa8d6499..d6289a3169 100644
--- a/src/core/socket.c
+++ b/src/core/socket.c
@@ -1475,6 +1475,13 @@ static void socket_enter_running(Socket *s, int cfd) {
/* Flush all sockets by closing and reopening them */
socket_close_fds(s);
+ r = socket_open_fds(s);
+ if (r < 0) {
+ log_warning_unit(UNIT(s)->id, "%s failed to listen on sockets: %s", UNIT(s)->id, strerror(-r));
+ socket_enter_stop_pre(s, SOCKET_FAILURE_RESOURCES);
+ return;
+ }
+
r = socket_watch_fds(s);
if (r < 0) {
log_warning_unit(UNIT(s)->id, "%s failed to watch sockets: %s", UNIT(s)->id, strerror(-r));