[systemd-commits] src/libsystemd
Daniel Mack
zonque at kemper.freedesktop.org
Tue Oct 21 13:16:11 PDT 2014
src/libsystemd/sd-bus/bus-kernel.c | 16 +++++++++++++---
src/libsystemd/sd-bus/kdbus.h | 3 ++-
2 files changed, 15 insertions(+), 4 deletions(-)
New commits:
commit 03785ad0e51b061efb9f9b3f2e328685f9a866aa
Author: Daniel Mack <daniel at zonque.org>
Date: Tue Oct 21 22:14:03 2014 +0200
sd-bus: sync kdbus.h (API change: switch to absolute timeouts)
kdbus_msg.timeout_ns now takes an absolute value, based on CLOCK_MONOTONIC,
in order to eventually support automatically restarted syscalls.
Signed-off-by: Daniel Mack <daniel at zonque.org>
diff --git a/src/libsystemd/sd-bus/bus-kernel.c b/src/libsystemd/sd-bus/bus-kernel.c
index 6b5a3d3..136c90f 100644
--- a/src/libsystemd/sd-bus/bus-kernel.c
+++ b/src/libsystemd/sd-bus/bus-kernel.c
@@ -270,10 +270,20 @@ static int bus_message_setup_kmsg(sd_bus *b, sd_bus_message *m) {
m->kdbus->cookie = (uint64_t) m->header->serial;
m->kdbus->priority = m->priority;
- if (m->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED)
+ if (m->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED) {
m->kdbus->cookie_reply = m->reply_cookie;
- else
- m->kdbus->timeout_ns = m->timeout * NSEC_PER_USEC;
+ } else {
+ struct timespec now;
+
+ r = clock_gettime(CLOCK_MONOTONIC_COARSE, &now);
+ if (r < 0) {
+ r = -errno;
+ goto fail;
+ }
+
+ m->kdbus->timeout_ns = now.tv_sec * NSEC_PER_SEC + now.tv_nsec +
+ m->timeout * NSEC_PER_USEC;
+ }
d = m->kdbus->items;
diff --git a/src/libsystemd/sd-bus/kdbus.h b/src/libsystemd/sd-bus/kdbus.h
index 087d50a..50b4ec4 100644
--- a/src/libsystemd/sd-bus/kdbus.h
+++ b/src/libsystemd/sd-bus/kdbus.h
@@ -384,7 +384,8 @@ enum kdbus_payload_type {
* @timeout_ns: The time to wait for a message reply from the peer.
* If there is no reply, a kernel-generated message
* with an attached KDBUS_ITEM_REPLY_TIMEOUT item
- * is sent to @src_id.
+ * is sent to @src_id. The timeout is expected in
+ * nanoseconds and as absolute CLOCK_MONOTONIC value.
* @cookie_reply: A reply to the requesting message with the same
* cookie. The requesting connection can match its
* request and the reply with this value
More information about the systemd-commits
mailing list