]> xenbits.xensource.com Git - libvirt.git/commitdiff
rpc: Initialize a worker pool for max_workers=0 as well
authorMarc Hartmayer <mhartmay@linux.ibm.com>
Tue, 7 Aug 2018 11:38:00 +0000 (13:38 +0200)
committerJohn Ferlan <jferlan@redhat.com>
Tue, 14 Aug 2018 16:16:42 +0000 (12:16 -0400)
Semantically, there is no difference between an uninitialized worker
pool and an initialized worker pool with zero workers. Let's allow the
worker pool to be initialized for max_workers=0 as well then which
makes the API more symmetric and simplifies code. Validity of the
worker pool is delegated to virThreadPoolGetMaxWorkers instead.

This patch fixes segmentation faults in
virNetServerGetThreadPoolParameters and
virNetServerSetThreadPoolParameters for the case when no worker pool
is actually initialized (max_workers=0).

Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
src/rpc/virnetserver.c

index c26637ed031df88b3111c91a711f2ba658a06ef2..b4461b3803cf8212b38e88da4c1f641d18773b09 100644 (file)
@@ -205,7 +205,7 @@ virNetServerDispatchNewMessage(virNetServerClientPtr client,
     virObjectRef(srv);
     virObjectUnlock(srv);
 
-    if (srv->workers) {
+    if (virThreadPoolGetMaxWorkers(srv->workers) > 0)  {
         virNetServerJobPtr job;
 
         if (VIR_ALLOC(job) < 0)
@@ -367,8 +367,7 @@ virNetServerPtr virNetServerNew(const char *name,
     if (!(srv = virObjectLockableNew(virNetServerClass)))
         return NULL;
 
-    if (max_workers &&
-        !(srv->workers = virThreadPoolNew(min_workers, max_workers,
+    if (!(srv->workers = virThreadPoolNew(min_workers, max_workers,
                                           priority_workers,
                                           virNetServerHandleJob,
                                           srv)))
@@ -579,21 +578,18 @@ virJSONValuePtr virNetServerPreExecRestart(virNetServerPtr srv)
         goto error;
 
     if (virJSONValueObjectAppendNumberUint(object, "min_workers",
-                                           srv->workers == NULL ? 0 :
                                            virThreadPoolGetMinWorkers(srv->workers)) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Cannot set min_workers data in JSON document"));
         goto error;
     }
     if (virJSONValueObjectAppendNumberUint(object, "max_workers",
-                                           srv->workers == NULL ? 0 :
                                            virThreadPoolGetMaxWorkers(srv->workers)) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Cannot set max_workers data in JSON document"));
         goto error;
     }
     if (virJSONValueObjectAppendNumberUint(object, "priority_workers",
-                                           srv->workers == NULL ? 0 :
                                            virThreadPoolGetPriorityWorkers(srv->workers)) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Cannot set priority_workers data in JSON document"));