chiark / gitweb /
bus: always explicitly rewind read index before passing message to caller or callback
authorLennart Poettering <lennart@poettering.net>
Sun, 14 Apr 2013 15:46:41 +0000 (17:46 +0200)
committerLennart Poettering <lennart@poettering.net>
Sun, 14 Apr 2013 15:46:41 +0000 (17:46 +0200)
src/libsystemd-bus/bus-match.c
src/libsystemd-bus/sd-bus.c

index 01434b33b5285d64f0cd18399d6c098b952114c2..501a38df70b8aad2905d687fffc5bf070e348624 100644 (file)
@@ -251,6 +251,10 @@ int bus_match_run(
                         node->leaf.last_iteration = bus->iteration_counter;
                 }
 
+                r = sd_bus_message_rewind(m, true);
+                if (r < 0)
+                        return r;
+
                 /* Run the callback. And then invoke siblings. */
                 assert(node->leaf.callback);
                 r = node->leaf.callback(bus, ret, m, node->leaf.userdata);
index f40958a26e4f4891f372741343aed657a8767412..f2dd81235facba6e4a2f2fe2fa0c00fd216558fc 100644 (file)
@@ -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;