chiark / gitweb /
bus: when we cannot bus activate a service because we go down, drop one
authorLennart Poettering <lennart@poettering.net>
Wed, 22 Jan 2014 22:36:06 +0000 (23:36 +0100)
committerLennart Poettering <lennart@poettering.net>
Mon, 27 Jan 2014 19:12:59 +0000 (20:12 +0100)
message from the queue

TODO
src/core/busname.c
src/libsystemd/sd-bus/bus-kernel.c
src/libsystemd/sd-bus/bus-kernel.h

diff --git a/TODO b/TODO
index b76db091e883db36f45d341340bc6a6829fac1b0..9406ce852ba87d2f111014138a84cedc4a65a294 100644 (file)
--- a/TODO
+++ b/TODO
@@ -166,7 +166,6 @@ Features:
   - bus proxy should fake seclabel when connecting to kdbus
   - allow updating attach flags during runtime
   - pid1: peek into activating message when activating a service
-  - when service activation failed, drop one message from the activator queue
 
 * sd-event
   - allow multiple signal handlers per signal?
index 9b6bf07d9f55d1facaf870d8a79a9aa8b5b72c07..0d19311db178af7c9765f25d2c32ffc0aba9ef84 100644 (file)
@@ -337,8 +337,8 @@ static void busname_enter_running(BusName *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_close_fd(n);
                 busname_enter_listening(n);
                 return;
         }
index a33e7a323c358fe5cde59830143ab27bba91c14a..b46cada6489d8f93253b68355452d18dcb1033f2 100644 (file)
@@ -1476,3 +1476,16 @@ int bus_kernel_try_close(sd_bus *bus) {
 
         return 0;
 }
+
+int bus_kernel_drop_one(int fd) {
+        struct kdbus_cmd_recv recv = {
+                .flags = KDBUS_RECV_DROP
+        };
+
+        assert(fd >= 0);
+
+        if (ioctl(fd, KDBUS_CMD_MSG_RECV, &recv) < 0)
+                return -errno;
+
+        return 0;
+}
index e9f776d9fdf90f1ae78815802f5cf6ff03e3566d..de02b84f882a6fc5912f209adabadca800cfd6aa 100644 (file)
@@ -79,3 +79,5 @@ int kdbus_translate_request_name_flags(uint64_t sd_bus_flags, uint64_t *kdbus_fl
 int kdbus_translate_attach_flags(uint64_t sd_bus_flags, uint64_t *kdbus_flags);
 
 int bus_kernel_try_close(sd_bus *bus);
+
+int bus_kernel_drop_one(int fd);