From: Lennart Poettering Date: Fri, 22 Sep 2023 20:23:58 +0000 (+0200) Subject: varlink: add new helper that reports whether connection is idle X-Git-Tag: v255-rc1~305^2~16 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8240fa920d7ed8ab21fb344a463d9a38e5f34cd6;p=thirdparty%2Fsystemd.git 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. --- 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);