diff options
author | Daniel Mack <daniel@zonque.org> | 2014-10-21 22:14:03 +0200 |
---|---|---|
committer | Daniel Mack <daniel@zonque.org> | 2014-10-21 22:14:03 +0200 |
commit | 03785ad0e51b061efb9f9b3f2e328685f9a866aa (patch) | |
tree | adb0af3923fbc98617169070ecae0de121f7fa4d /src | |
parent | bc75205c773313a38a6958a6905a99bd56029196 (diff) |
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@zonque.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/libsystemd/sd-bus/bus-kernel.c | 16 | ||||
-rw-r--r-- | 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 6b5a3d3713..136c90fc63 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 087d50aabb..50b4ec41b3 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 |