summaryrefslogtreecommitdiff
path: root/src/libsystemd
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2015-01-09 21:25:23 +0100
committerLennart Poettering <lennart@poettering.net>2015-01-09 21:25:23 +0100
commit997eadb5534cbd3d1de3d93f6489a3b4d03405e1 (patch)
tree37c08d0a43d54276b3422d21b064dfc67fb46351 /src/libsystemd
parentd714387ed7003ce011a3ed0f1a604a7984a8a68d (diff)
sd-bus: even if we need a cookie when sending a message there's no need to needlessly send it if we don't actually need it
Diffstat (limited to 'src/libsystemd')
-rw-r--r--src/libsystemd/sd-bus/sd-bus.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c
index 15180d0423..125b302c95 100644
--- a/src/libsystemd/sd-bus/sd-bus.c
+++ b/src/libsystemd/sd-bus/sd-bus.c
@@ -1704,8 +1704,8 @@ static int bus_send_internal(sd_bus *bus, sd_bus_message *_m, uint64_t *cookie,
/* If this is a reply and no reply was requested, then let's
* suppress this, if we can */
- if (m->dont_send && !cookie)
- return 1;
+ if (m->dont_send)
+ goto finish;
if ((bus->state == BUS_RUNNING || bus->state == BUS_HELLO) && bus->wqueue_size <= 0) {
size_t idx = 0;
@@ -1718,7 +1718,9 @@ static int bus_send_internal(sd_bus *bus, sd_bus_message *_m, uint64_t *cookie,
}
return r;
- } else if (!bus->is_kernel && idx < BUS_MESSAGE_SIZE(m)) {
+ }
+
+ if (!bus->is_kernel && idx < BUS_MESSAGE_SIZE(m)) {
/* Wasn't fully written. So let's remember how
* much was written. Note that the first entry
* of the wqueue array is always allocated so
@@ -1728,6 +1730,7 @@ static int bus_send_internal(sd_bus *bus, sd_bus_message *_m, uint64_t *cookie,
bus->wqueue_size = 1;
bus->windex = idx;
}
+
} else {
/* Just append it to the queue. */
@@ -1740,6 +1743,7 @@ static int bus_send_internal(sd_bus *bus, sd_bus_message *_m, uint64_t *cookie,
bus->wqueue[bus->wqueue_size ++] = sd_bus_message_ref(m);
}
+finish:
if (cookie)
*cookie = BUS_MESSAGE_COOKIE(m);