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/libsystemd/sd-bus/bus-kernel.c | |
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/libsystemd/sd-bus/bus-kernel.c')
-rw-r--r-- | src/libsystemd/sd-bus/bus-kernel.c | 16 |
1 files changed, 13 insertions, 3 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; |