]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
varlink: add new helper that reports whether connection is idle
authorLennart Poettering <lennart@poettering.net>
Fri, 22 Sep 2023 20:23:58 +0000 (22:23 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 6 Oct 2023 05:44:47 +0000 (07:44 +0200)
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
src/shared/varlink.h

index d2f649485bf27282cb0bda63209684e2321fe4c7..5af2c2c3634791ae4b5183b20492d1da9e9bf101 100644 (file)
@@ -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);
index 0984222c96be3b9447732a3486f49161d8c4f553..5eb4676dc83330409e9fd1d80fc244cd55725ea3 100644 (file)
@@ -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);