diff --git a/src/shared/varlink.c b/src/shared/varlink.c index d2f649485b..5af2c2c363 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 0984222c96..5eb4676dc8 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);