]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
rpc: push ref acquisition into RPC dispatch function
authorDaniel P. Berrangé <berrange@redhat.com>
Tue, 6 Mar 2018 16:07:35 +0000 (16:07 +0000)
committerDaniel P. Berrangé <berrange@redhat.com>
Thu, 8 Mar 2018 15:40:29 +0000 (15:40 +0000)
There's no reason why the virNetServerClientDispatchRead method needs to
acquire an extra reference on the "client" object. An extra reference is
only needed if the registered dispatch callback is going to keep hold of
the "client" for work in the background. Thus we can push reference
acquisition into virNetServerDispatchNewMessage.

Reviewed-by: John Ferlan <jferlan@redhat.com>
Reviewed-by: Jim Fehlig <jfehlig@suse.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
src/rpc/virnetserver.c
src/rpc/virnetserverclient.c

index 204f425264fa937b756092e47cd289f2ea86add9..28afe54e497f00a8f6c7258ed1cf07f6bcb939da 100644 (file)
@@ -217,9 +217,11 @@ static int virNetServerDispatchNewMessage(virNetServerClientPtr client,
             priority = virNetServerProgramGetPriority(prog, msg->header.proc);
         }
 
+        virObjectRef(client);
         ret = virThreadPoolSendJob(srv->workers, priority, job);
 
         if (ret < 0) {
+            virObjectUnref(client);
             VIR_FREE(job);
             virObjectUnref(prog);
         }
index 388514946b3955d1add429ff6a9a3c21e036f15c..00459d17ba14555a56212bc109d7acabd18b973b 100644 (file)
@@ -1315,12 +1315,10 @@ static void virNetServerClientDispatchRead(virNetServerClientPtr client)
 
         /* Send off to for normal dispatch to workers */
         if (msg) {
-            virObjectRef(client);
             if (!client->dispatchFunc ||
                 client->dispatchFunc(client, msg, client->dispatchOpaque) < 0) {
                 virNetMessageFree(msg);
                 client->wantClose = true;
-                virObjectUnref(client);
                 return;
             }
         }