[systemd-commits] src/core

Lennart Poettering lennart at kemper.freedesktop.org
Mon Dec 16 12:26:54 PST 2013


 src/core/busname.c |    7 +++++++
 src/core/socket.c  |    7 +++++++
 2 files changed, 14 insertions(+)

New commits:
commit 16ac401407959cbc62312e61c2dd76dbc3a0793b
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Dec 16 21:26:21 2013 +0100

    bus: when a busname unit refuses to activate a service it should flush the queue

diff --git a/src/core/busname.c b/src/core/busname.c
index 49a43fe..034e5f6 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 aaaa8d6..d6289a3 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));



More information about the systemd-commits mailing list