On Fri, Jun 15, 2018 at 03:31:34PM +0200, Marc Hartmayer wrote: > On Fri, Jun 15, 2018 at 01:39 PM +0200, Marc Hartmayer <mhartmay@xxxxxxxxxxxxx> wrote: > > If srv->workers is a NULL pointer, as it is the case if there are no > > workers, then don't try to dereference it. > > > > Signed-off-by: Marc Hartmayer <mhartmay@xxxxxxxxxxxxx> > > Reviewed-by: Boris Fiuczynski <fiuczy@xxxxxxxxxxxxx> > > --- > > src/rpc/virnetserver.c | 22 +++++++++++++++------- > > 1 file changed, 15 insertions(+), 7 deletions(-) > > > > diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c > > index 5ae809e372..be6f610880 100644 > > --- a/src/rpc/virnetserver.c > > +++ b/src/rpc/virnetserver.c > > @@ -933,13 +933,21 @@ virNetServerGetThreadPoolParameters(virNetServerPtr srv, > > size_t *jobQueueDepth) > > { > > virObjectLock(srv); > > - > > - *minWorkers = virThreadPoolGetMinWorkers(srv->workers); > > - *maxWorkers = virThreadPoolGetMaxWorkers(srv->workers); > > - *freeWorkers = virThreadPoolGetFreeWorkers(srv->workers); > > - *nWorkers = virThreadPoolGetCurrentWorkers(srv->workers); > > - *nPrioWorkers = virThreadPoolGetPriorityWorkers(srv->workers); > > - *jobQueueDepth = virThreadPoolGetJobQueueDepth(srv->workers); > > + if (srv->workers) { > > + *minWorkers = virThreadPoolGetMinWorkers(srv->workers); > > + *maxWorkers = virThreadPoolGetMaxWorkers(srv->workers); > > + *freeWorkers = virThreadPoolGetFreeWorkers(srv->workers); > > + *nWorkers = virThreadPoolGetCurrentWorkers(srv->workers); > > + *nPrioWorkers = virThreadPoolGetPriorityWorkers(srv->workers); > > + *jobQueueDepth = virThreadPoolGetJobQueueDepth(srv->workers); > > + } else { > > + *minWorkers = 0; > > + *maxWorkers = 0; > > + *freeWorkers = 0; > > + *nWorkers = 0; > > + *nPrioWorkers = 0; > > + *jobQueueDepth = 0; > > + } > > > > virObjectUnlock(srv); > > return 0; > > -- > > 2.13.6 > > After thinking again it probably makes more sense (and the code more > beautiful) to initialize the worker pool even for maxworker=0 (within I don't understand why should we do that. We don't even initialize it for libvirtd server - the implications are clear - you don't have workers, you don't get to process a job. > virNetServerNew) (=> we'll have to adapt virNetServerDispatchNewMessage > as well). BTW, there is also a segmentation fault in > virThreadPoolSetParameters… And currently it’s not possible to start > with maxworkers set to 0 and then increase it via Do I assume correctly that virNetServerDispatchNewMessage would allocate a new worker if there was a request to process but the threadpool was empty? If so, I don't see a reason to do that, why would anyone want to run with no workers? They don't consume any resources, since they're waiting on a condition. However, any segfaults or deadlocks must be fixed, I'll have a look at the series as is, unless you've got a compelling reason why it's beneficial to run with no workers at all. Thanks, Erik -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list