summaryrefslogtreecommitdiff
path: root/src/libsystemd-bus/sd-bus.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2013-04-05 03:15:10 +0200
committerLennart Poettering <lennart@poettering.net>2013-04-05 03:15:10 +0200
commit6807947e56d7d1b40ec4e984a5f631fb6d5a6834 (patch)
tree158b40fa0a3fca53be27cc275910bc9730a037f7 /src/libsystemd-bus/sd-bus.c
parent4b9c52209b197a6ccf4b027a9a71c63390b33ba5 (diff)
bus: don't allow recursive invocation of sd_bus_process()
Diffstat (limited to 'src/libsystemd-bus/sd-bus.c')
-rw-r--r--src/libsystemd-bus/sd-bus.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/libsystemd-bus/sd-bus.c b/src/libsystemd-bus/sd-bus.c
index 0964649e39..8daf922ded 100644
--- a/src/libsystemd-bus/sd-bus.c
+++ b/src/libsystemd-bus/sd-bus.c
@@ -1845,6 +1845,10 @@ int sd_bus_process(sd_bus *bus, sd_bus_message **ret) {
if (bus->input_fd < 0)
return -ENOTCONN;
+ /* We don't allow recursively invoking sd_bus_process(). */
+ if (bus->processing)
+ return -EBUSY;
+
switch (bus->state) {
case BUS_UNSET:
@@ -1870,7 +1874,11 @@ int sd_bus_process(sd_bus *bus, sd_bus_message **ret) {
case BUS_RUNNING:
case BUS_HELLO:
- return process_running(bus, ret);
+ bus->processing = true;
+ r = process_running(bus, ret);
+ bus->processing = false;
+
+ return r;
}
assert_not_reached("Unknown state");