chiark / gitweb /
dbus-timer: fix bus_timer_vtable to have the correct times
[elogind.git] / src / core / busname.c
index 49a43feb376f3b4afb2580e84f62bfb787168751..4c34538c6524843e20b6fe8171fb1851e0c33c94 100644 (file)
@@ -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;
 
@@ -215,7 +217,7 @@ static int busname_watch_fd(BusName *n) {
         if (n->event_source)
                 r = sd_event_source_set_enabled(n->event_source, SD_EVENT_ON);
         else
-                r = sd_event_add_io(UNIT(n)->manager->event, n->starter_fd, EPOLLIN, busname_dispatch_io, n, &n->event_source);
+                r = sd_event_add_io(UNIT(n)->manager->event, &n->event_source, n->starter_fd, EPOLLIN, busname_dispatch_io, n);
         if (r < 0) {
                 log_warning_unit(UNIT(n)->id, "Failed to watch starter fd: %s", strerror(-r));
                 busname_unwatch_fd(n);
@@ -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;
         }
 
@@ -577,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 = {