From 42c60a7843c791f60891cf83da1b93998fbc5c9f Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Thu, 9 Aug 2012 12:35:43 +0100 Subject: [PATCH] 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 --- src/rpc/virnetserver.c | 46 +++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c index 03cf0b747..0a6ecdc40 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, -- 2.39.5