mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-27 19:11:16 +00:00
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:
parent
0c4b391e2a
commit
42fccb4716
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user