[systemd-devel] [systemd-commits] src/libsystemd

Lennart Poettering mzerqung at 0pointer.de
Tue Oct 21 13:27:43 PDT 2014


On Tue, 21.10.14 13:16, Daniel Mack (zonque at kemper.freedesktop.org) wrote:

>  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);

It sounds OK to enclose this in assert( == 0) really. That's what we
do in now() at least. If gettint the time fails we are massively
fucked, and we can just assert.

> +                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;

I wonder if it's worth adding timspec_load_ns() or so, similar to
timespec_load() but for nsec_t instead of usec_t for this.

Lennart

-- 
Lennart Poettering, Red Hat


More information about the systemd-devel mailing list