chiark / gitweb /
bus: add sd_bus_get_current() bus call to determine message that is currently being...
authorLennart Poettering <lennart@poettering.net>
Tue, 5 Nov 2013 19:51:49 +0000 (20:51 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 5 Nov 2013 19:51:49 +0000 (20:51 +0100)
src/libsystemd-bus/bus-internal.h
src/libsystemd-bus/sd-bus.c
src/systemd/sd-bus.h

index 913f281316ef87fd80ed3afe4be6c61d21e3c254..2112a29687d1f00fb2e64ea2189b99aefd9b2424 100644 (file)
@@ -247,6 +247,8 @@ struct sd_bus {
         sd_event_source *time_event_source;
         sd_event_source *quit_event_source;
         sd_event *event;
+
+        sd_bus_message *current;
 };
 
 #define BUS_DEFAULT_TIMEOUT ((usec_t) (25 * USEC_PER_SEC))
index a9f238ef220e3b651857c81ec4f54c23ce6794c6..e68f127b708ba4c7c9eb8d666966c8a29fd5d5d3 100644 (file)
@@ -1931,6 +1931,7 @@ static int process_message(sd_bus *bus, sd_bus_message *m) {
         assert(bus);
         assert(m);
 
+        bus->current = m;
         bus->iteration_counter++;
 
         log_debug("Got message sender=%s object=%s interface=%s member=%s",
@@ -1941,25 +1942,29 @@ static int process_message(sd_bus *bus, sd_bus_message *m) {
 
         r = process_hello(bus, m);
         if (r != 0)
-                return r;
+                goto finish;
 
         r = process_reply(bus, m);
         if (r != 0)
-                return r;
+                goto finish;
 
         r = process_filter(bus, m);
         if (r != 0)
-                return r;
+                goto finish;
 
         r = process_match(bus, m);
         if (r != 0)
-                return r;
+                goto finish;
 
         r = process_builtin(bus, m);
         if (r != 0)
-                return r;
+                goto finish;
+
+        r = bus_process_object(bus, m);
 
-        return bus_process_object(bus, m);
+finish:
+        bus->current = NULL;
+        return r;
 }
 
 static int process_running(sd_bus *bus, sd_bus_message **ret) {
@@ -2422,3 +2427,9 @@ int sd_bus_detach_event(sd_bus *bus) {
 
         return 0;
 }
+
+sd_bus_message* sd_bus_get_current(sd_bus *bus) {
+        assert_return(bus, NULL);
+
+        return bus->current;
+}
index 6b43a23d00962516f6d798f78c0596da71ef6449..48edc59188eecd463fd2ac425f4cd8a8cc433f4b 100644 (file)
@@ -101,6 +101,8 @@ int sd_bus_process(sd_bus *bus, sd_bus_message **r);
 int sd_bus_wait(sd_bus *bus, uint64_t timeout_usec);
 int sd_bus_flush(sd_bus *bus);
 
+sd_bus_message* sd_bus_get_current(sd_bus *bus);
+
 int sd_bus_attach_event(sd_bus *bus, sd_event *e, int priority);
 int sd_bus_detach_event(sd_bus *bus);