Commit 6807947e authored by Lennart Poettering's avatar Lennart Poettering

bus: don't allow recursive invocation of sd_bus_process()

parent 4b9c5220
......@@ -85,6 +85,7 @@ struct sd_bus {
bool anonymous_auth:1;
bool prefer_readv:1;
bool prefer_writev:1;
bool processing:1;
void *rbuffer;
size_t rbuffer_size;
......
......@@ -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");
......
......@@ -34,7 +34,6 @@ extern "C" {
/* TODO:
* - allow registration/removl of callbacks from within callbacks
* - don't allow recursive processing
*
* - add page donation logic
* - api for appending/reading fixed arrays
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment