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:
parent
4b9c52209b
commit
6807947e56
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user