From 8240fa920d7ed8ab21fb344a463d9a38e5f34cd6 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 22 Sep 2023 22:23:58 +0200 Subject: [PATCH] varlink: add new helper that reports whether connection is idle This is useful to allow event loops to run exactly as long as there's something to do but not longer. --- src/shared/varlink.c | 9 +++++++++ src/shared/varlink.h | 2 ++ 2 files changed, 11 insertions(+) diff --git a/src/shared/varlink.c b/src/shared/varlink.c index d2f649485bf..5af2c2c3634 100644 --- a/src/shared/varlink.c +++ b/src/shared/varlink.c @@ -1282,6 +1282,15 @@ int varlink_wait(Varlink *v, usec_t timeout) { return 1; } +int varlink_is_idle(Varlink *v) { + assert_return(v, -EINVAL); + + /* Returns true if there's nothing pending on the connection anymore, i.e. we processed all incoming + * or outgoing messages fully, or finished disconnection */ + + return IN_SET(v->state, VARLINK_DISCONNECTED, VARLINK_IDLE_CLIENT, VARLINK_IDLE_SERVER); +} + int varlink_get_fd(Varlink *v) { assert_return(v, -EINVAL); diff --git a/src/shared/varlink.h b/src/shared/varlink.h index 0984222c96b..5eb4676dc83 100644 --- a/src/shared/varlink.h +++ b/src/shared/varlink.h @@ -71,6 +71,8 @@ sd_event *varlink_get_event(Varlink *v); int varlink_process(Varlink *v); int varlink_wait(Varlink *v, usec_t timeout); +int varlink_is_idle(Varlink *v); + int varlink_flush(Varlink *v); int varlink_close(Varlink *v); -- 2.47.3