1
0
mirror of https://github.com/systemd/systemd.git synced 2024-11-05 06:52:22 +03:00

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

This commit is contained in:
Lennart Poettering 2013-04-05 03:15:10 +02:00
parent 4b9c52209b
commit 6807947e56
3 changed files with 10 additions and 2 deletions

View File

@ -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;

View File

@ -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");

View File

@ -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