From 03785ad0e51b061efb9f9b3f2e328685f9a866aa Mon Sep 17 00:00:00 2001 From: Daniel Mack Date: Tue, 21 Oct 2014 22:14:03 +0200 Subject: [PATCH] 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 --- src/libsystemd/sd-bus/bus-kernel.c | 16 +++++++++++++--- src/libsystemd/sd-bus/kdbus.h | 3 ++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/libsystemd/sd-bus/bus-kernel.c b/src/libsystemd/sd-bus/bus-kernel.c index 6b5a3d371..136c90fc6 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 087d50aab..50b4ec41b 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 -- 2.30.2