From: Daniel P. Berrange Date: Thu, 9 Aug 2012 11:35:43 +0000 (+0100) Subject: Refactor the way new clients are registered with the server X-Git-Tag: v0.10.0-rc1~78 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=42c60a7843c791f60891cf83da1b93998fbc5c9f;p=thirdparty%2Flibvirt.git Refactor the way new clients are registered with the server Currently the virNetServerDispatchNewClient both creates the virNetServerClientPtr instance and registers it with the virNetServerPtr internal state. Split the client registration code out into a separate virNetServerAddClient method to allow future reuse from other contexts Signed-off-by: Daniel P. Berrange --- diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c index 03cf0b7475..0a6ecdc406 100644 --- a/src/rpc/virnetserver.c +++ b/src/rpc/virnetserver.c @@ -262,13 +262,9 @@ cleanup: } -static int virNetServerDispatchNewClient(virNetServerServicePtr svc, - virNetSocketPtr clientsock, - void *opaque) +static int virNetServerAddClient(virNetServerPtr srv, + virNetServerClientPtr client) { - virNetServerPtr srv = opaque; - virNetServerClientPtr client = NULL; - virNetServerLock(srv); if (srv->nclients >= srv->nclients_max) { @@ -278,16 +274,6 @@ static int virNetServerDispatchNewClient(virNetServerServicePtr svc, goto error; } - if (!(client = virNetServerClientNew(clientsock, - virNetServerServiceGetAuth(svc), - virNetServerServiceIsReadonly(svc), - virNetServerServiceGetMaxRequests(svc), - virNetServerServiceGetTLSContext(svc), - srv->clientPrivNew, - srv->clientPrivFree, - srv->clientPrivOpaque))) - goto error; - if (virNetServerClientInit(client) < 0) goto error; @@ -309,12 +295,36 @@ static int virNetServerDispatchNewClient(virNetServerServicePtr svc, return 0; error: - virNetServerClientClose(client); - virObjectUnref(client); virNetServerUnlock(srv); return -1; } +static int virNetServerDispatchNewClient(virNetServerServicePtr svc, + virNetSocketPtr clientsock, + void *opaque) +{ + virNetServerPtr srv = opaque; + virNetServerClientPtr client; + + if (!(client = virNetServerClientNew(clientsock, + virNetServerServiceGetAuth(svc), + virNetServerServiceIsReadonly(svc), + virNetServerServiceGetMaxRequests(svc), + virNetServerServiceGetTLSContext(svc), + srv->clientPrivNew, + srv->clientPrivFree, + srv->clientPrivOpaque))) + return -1; + + if (virNetServerAddClient(srv, client) < 0) { + virNetServerClientClose(client); + virObjectUnref(client); + return -1; + } + virObjectUnref(client); + return 0; +} + static void virNetServerFatalSignal(int sig, siginfo_t *siginfo ATTRIBUTE_UNUSED,