summaryrefslogtreecommitdiff
path: root/src/libsystemd-bus/sd-bus.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libsystemd-bus/sd-bus.c')
-rw-r--r--src/libsystemd-bus/sd-bus.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/libsystemd-bus/sd-bus.c b/src/libsystemd-bus/sd-bus.c
index f40958a26..f2dd81235 100644
--- a/src/libsystemd-bus/sd-bus.c
+++ b/src/libsystemd-bus/sd-bus.c
@@ -1584,6 +1584,10 @@ static int process_reply(sd_bus *bus, sd_bus_message *m) {
if (c->timeout != 0)
prioq_remove(bus->reply_callbacks_prioq, c, &c->prioq_idx);
+ r = sd_bus_message_rewind(m, true);
+ if (r < 0)
+ return r;
+
r = c->callback(bus, 0, m, c->userdata);
free(c);
@@ -1611,6 +1615,10 @@ static int process_filter(sd_bus *bus, sd_bus_message *m) {
l->last_iteration = bus->iteration_counter;
+ r = sd_bus_message_rewind(m, true);
+ if (r < 0)
+ return r;
+
r = l->callback(bus, 0, m, l->userdata);
if (r != 0)
return r;
@@ -1720,6 +1728,10 @@ static int process_object(sd_bus *bus, sd_bus_message *m) {
c->last_iteration = bus->iteration_counter;
+ r = sd_bus_message_rewind(m, true);
+ if (r < 0)
+ return r;
+
r = c->callback(bus, 0, m, c->userdata);
if (r != 0)
return r;
@@ -1746,6 +1758,10 @@ static int process_object(sd_bus *bus, sd_bus_message *m) {
c->last_iteration = bus->iteration_counter;
+ r = sd_bus_message_rewind(m, true);
+ if (r < 0)
+ return r;
+
r = c->callback(bus, 0, m, c->userdata);
if (r != 0)
return r;
@@ -1930,6 +1946,10 @@ static int process_running(sd_bus *bus, sd_bus_message **ret) {
goto null_message;
if (ret) {
+ r = sd_bus_message_rewind(m, true);
+ if (r < 0)
+ return r;
+
*ret = m;
m = NULL;
return 1;