chiark / gitweb /
bus: when replying to an incoming message and the vtable contains the expected return...
[elogind.git] / src / libsystemd-bus / bus-socket.c
index 355f31c56251ddbec613dbaeb4b4e37b5c72e620..d7d3b4dac5aa2bea3c4b21e40de7f3edc4fb5423 100644 (file)
@@ -900,6 +900,10 @@ static int bus_socket_make_message(sd_bus *bus, size_t size) {
         assert(bus->rbuffer_size >= size);
         assert(bus->state == BUS_RUNNING || bus->state == BUS_HELLO);
 
+        r = bus_rqueue_make_room(bus);
+        if (r < 0)
+                return r;
+
         if (bus->rbuffer_size > size) {
                 b = memdup((const uint8_t*) bus->rbuffer + size,
                            bus->rbuffer_size - size);
@@ -925,11 +929,7 @@ static int bus_socket_make_message(sd_bus *bus, size_t size) {
         bus->fds = NULL;
         bus->n_fds = 0;
 
-        r = bus_rqueue_push(bus, t);
-        if (r < 0) {
-                sd_bus_message_unref(t);
-                return r;
-        }
+        bus->rqueue[bus->rqueue_size++] = t;
 
         return 1;
 }
@@ -953,10 +953,6 @@ int bus_socket_read_message(sd_bus *bus) {
         assert(bus);
         assert(bus->state == BUS_RUNNING || bus->state == BUS_HELLO);
 
-        r = bus_rqueue_make_room(bus, 1);
-        if (r < 0)
-                return r;
-
         r = bus_socket_read_message_need(bus, &need);
         if (r < 0)
                 return r;