diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c index 95333d0cc3cfc00875c78f67c561c411520f2a4a..e536cc30ee015c91b05436379fe45e0d0e8a7f60 100644 --- a/src/rpc/virnetserver.c +++ b/src/rpc/virnetserver.c @@ -1120,7 +1120,7 @@ void virNetServerRun(virNetServerPtr srv) if (virNetServerClientWantClose(srv->clients[i])) virNetServerClientClose(srv->clients[i]); if (virNetServerClientIsClosed(srv->clients[i])) { - virObjectUnref(srv->clients[i]); + virNetServerClientPtr client = srv->clients[i]; if (srv->nclients > 1) { memmove(srv->clients + i, srv->clients + i + 1, @@ -1131,6 +1131,10 @@ void virNetServerRun(virNetServerPtr srv) srv->nclients = 0; } + virObjectUnlock(srv); + virObjectUnref(client); + virObjectLock(srv); + goto reprocess; } }