# rpc/virnetserverclient.h
virNetServerClientAddFilter;
virNetServerClientClose;
+virNetServerClientCloseLocked;
virNetServerClientDelayedClose;
virNetServerClientGetAuth;
virNetServerClientGetFD;
virNetServerClientImmediateClose;
virNetServerClientInit;
virNetServerClientInitKeepAlive;
-virNetServerClientIsClosed;
+virNetServerClientIsClosedLocked;
virNetServerClientIsLocal;
virNetServerClientIsSecure;
virNetServerClientLocalAddrStringSASL;
virNetServerClientSetDispatcher;
virNetServerClientSetReadonly;
virNetServerClientStartKeepAlive;
-virNetServerClientWantClose;
+virNetServerClientWantCloseLocked;
# rpc/virnetservermdns.h
goto error;
srv->clients[srv->nclients-1] = virObjectRef(client);
- if (virNetServerClientNeedAuth(client))
+ virObjectLock(client);
+ if (virNetServerClientNeedAuthLocked(client))
virNetServerTrackPendingAuthLocked(srv);
+ virObjectUnlock(client);
virNetServerCheckLimits(srv);
virNetServerProcessClients(virNetServerPtr srv)
{
size_t i;
+ virNetServerClientPtr client;
virObjectLock(srv);
/* Coverity 5.3.0 couldn't see that srv->clients is non-NULL
* if srv->nclients is non-zero. */
sa_assert(srv->clients);
- if (virNetServerClientWantClose(srv->clients[i]))
- virNetServerClientClose(srv->clients[i]);
- if (virNetServerClientIsClosed(srv->clients[i])) {
- virNetServerClientPtr client = srv->clients[i];
+ client = srv->clients[i];
+ virObjectLock(client);
+ if (virNetServerClientWantCloseLocked(client))
+ virNetServerClientCloseLocked(client);
+
+ if (virNetServerClientIsClosedLocked(client)) {
VIR_DELETE_ELEMENT(srv->clients, i, srv->nclients);
- if (virNetServerClientNeedAuth(client))
+ if (virNetServerClientNeedAuthLocked(client))
virNetServerTrackCompletedAuthLocked(srv);
+ virObjectUnlock(client);
virNetServerCheckLimits(srv);
virObjectLock(srv);
goto reprocess;
+ } else {
+ virObjectUnlock(client);
}
}
* Full free of the client is done later in a safe point
* where it can be guaranteed it is no longer in use
*/
-void virNetServerClientClose(virNetServerClientPtr client)
+void
+virNetServerClientCloseLocked(virNetServerClientPtr client)
{
virNetServerClientCloseFunc cf;
virKeepAlivePtr ka;
- virObjectLock(client);
VIR_DEBUG("client=%p", client);
- if (!client->sock) {
- virObjectUnlock(client);
+ if (!client->sock)
return;
- }
if (client->keepalive) {
virKeepAliveStop(client->keepalive);
virObjectUnref(client->sock);
client->sock = NULL;
}
-
- virObjectUnlock(client);
}
-bool virNetServerClientIsClosed(virNetServerClientPtr client)
+void
+virNetServerClientClose(virNetServerClientPtr client)
{
- bool closed;
virObjectLock(client);
- closed = client->sock == NULL ? true : false;
+ virNetServerClientCloseLocked(client);
virObjectUnlock(client);
- return closed;
}
+
+bool
+virNetServerClientIsClosedLocked(virNetServerClientPtr client)
+{
+ return client->sock == NULL ? true : false;
+}
+
+
void virNetServerClientDelayedClose(virNetServerClientPtr client)
{
virObjectLock(client);
virObjectUnlock(client);
}
-bool virNetServerClientWantClose(virNetServerClientPtr client)
+
+bool
+virNetServerClientWantCloseLocked(virNetServerClientPtr client)
{
- bool wantClose;
- virObjectLock(client);
- wantClose = client->wantClose;
- virObjectUnlock(client);
- return wantClose;
+ return client->wantClose;
}
virNetServerClientDispatchFunc func,
void *opaque);
void virNetServerClientClose(virNetServerClientPtr client);
-bool virNetServerClientIsClosed(virNetServerClientPtr client);
+void virNetServerClientCloseLocked(virNetServerClientPtr client);
+bool virNetServerClientIsClosedLocked(virNetServerClientPtr client);
void virNetServerClientDelayedClose(virNetServerClientPtr client);
void virNetServerClientImmediateClose(virNetServerClientPtr client);
-bool virNetServerClientWantClose(virNetServerClientPtr client);
+bool virNetServerClientWantCloseLocked(virNetServerClientPtr client);
int virNetServerClientInit(virNetServerClientPtr client);