diff --git a/src/remote/remote_daemon_stream.c b/src/remote/remote_daemon_stream.c index c4f14a27ef..82cadb67ac 100644 --- a/src/remote/remote_daemon_stream.c +++ b/src/remote/remote_daemon_stream.c @@ -286,14 +286,16 @@ daemonStreamEvent(virStreamPtr st, int events, void *opaque) * -1 on fatal client error */ static int -daemonStreamFilter(virNetServerClientPtr client G_GNUC_UNUSED, +daemonStreamFilter(virNetServerClientPtr client, virNetMessagePtr msg, void *opaque) { daemonClientStream *stream = opaque; int ret = 0; + virObjectUnlock(client); virMutexLock(&stream->priv->lock); + virObjectLock(client); if (msg->header.type != VIR_NET_STREAM && msg->header.type != VIR_NET_STREAM_HOLE) diff --git a/src/rpc/virnetserverclient.h b/src/rpc/virnetserverclient.h index 1c520fef6b..7a3061d1ae 100644 --- a/src/rpc/virnetserverclient.h +++ b/src/rpc/virnetserverclient.h @@ -40,6 +40,9 @@ typedef void (*virNetServerClientDispatchFunc)(virNetServerClientPtr client, virNetMessagePtr msg, void *opaque); +/* + * @client is locked when this callback is called + */ typedef int (*virNetServerClientFilterFunc)(virNetServerClientPtr client, virNetMessagePtr msg, void *opaque);