virNetServerProcessClients: Remove goto

This gets rid of the goto and prepares the function for automatic
mutex management.

Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Tim Wiederhake 2022-04-12 13:05:19 +02:00
parent 0c4b391e2a
commit 42fccb4716

View File

@ -960,13 +960,19 @@ virNetServerHasClients(virNetServer *srv)
void
virNetServerProcessClients(virNetServer *srv)
{
size_t i;
virNetServerClient *client;
size_t i = 0;
virObjectLock(srv);
while (true) {
virNetServerClient *client;
bool removed = false;
virObjectLock(srv);
if (i >= srv->nclients) {
virObjectUnlock(srv);
return;
}
reprocess:
for (i = 0; i < srv->nclients; i++) {
client = srv->clients[i];
virObjectLock(client);
if (virNetServerClientWantCloseLocked(client))
@ -974,24 +980,26 @@ virNetServerProcessClients(virNetServer *srv)
if (virNetServerClientIsClosedLocked(client)) {
VIR_DELETE_ELEMENT(srv->clients, i, srv->nclients);
removed = true;
/* Update server authentication tracking */
virNetServerSetClientAuthCompletedLocked(srv, client);
virObjectUnlock(client);
virNetServerCheckLimits(srv);
}
virObjectUnlock(client);
if (removed) {
i = 0;
virObjectUnlock(srv);
virObjectUnref(client);
virObjectLock(srv);
goto reprocess;
} else {
virObjectUnlock(client);
continue;
}
}
virObjectUnlock(srv);
i++;
virObjectUnlock(srv);
}
}