commit eefabb38c34cb61edcb4a233ebc7c764547e515e Author: Daniel P. Berrangé Date: Tue Mar 6 17:12:20 2018 +0000 rpc: switch virtlockd and virtlogd to use single-threaded dispatch Currently both virtlogd and virtlockd use a single worker thread for dispatching RPC messages. Even this is overkill and their RPC message handling callbacks all run in short, finite time and so blocking the main loop is not an issue like you'd see in libvirtd with long running QEMU commands. By setting max_workers==0, we can turn off the worker thread and run these daemons single threaded. This in turn fixes a serious problem in the virtlockd daemon whereby it loses all fcntl() locks at re-exec due to multiple threads existing. fcntl() locks only get preserved if the process is single threaded at time of exec(). Reviewed-by: John Ferlan Reviewed-by: Jim Fehlig Signed-off-by: Daniel P. Berrangé Index: libvirt-4.1.0/src/locking/lock_daemon.c =================================================================== --- libvirt-4.1.0.orig/src/locking/lock_daemon.c +++ libvirt-4.1.0/src/locking/lock_daemon.c @@ -165,7 +165,7 @@ virLockDaemonNew(virLockDaemonConfigPtr goto error; if (!(srv = virNetServerNew("virtlockd", 1, - 1, 1, 0, config->max_clients, + 0, 0, 0, config->max_clients, config->max_clients, -1, 0, NULL, virLockDaemonClientNew, @@ -180,7 +180,7 @@ virLockDaemonNew(virLockDaemonConfigPtr srv = NULL; if (!(srv = virNetServerNew("admin", 1, - 1, 1, 0, config->admin_max_clients, + 0, 0, 0, config->admin_max_clients, config->admin_max_clients, -1, 0, NULL, remoteAdmClientNew, Index: libvirt-4.1.0/src/logging/log_daemon.c =================================================================== --- libvirt-4.1.0.orig/src/logging/log_daemon.c +++ libvirt-4.1.0/src/logging/log_daemon.c @@ -154,7 +154,7 @@ virLogDaemonNew(virLogDaemonConfigPtr co goto error; if (!(srv = virNetServerNew("virtlogd", 1, - 1, 1, 0, config->max_clients, + 0, 0, 0, config->max_clients, config->max_clients, -1, 0, NULL, virLogDaemonClientNew, @@ -169,7 +169,7 @@ virLogDaemonNew(virLogDaemonConfigPtr co srv = NULL; if (!(srv = virNetServerNew("admin", 1, - 1, 1, 0, config->admin_max_clients, + 0, 0, 0, config->admin_max_clients, config->admin_max_clients, -1, 0, NULL, remoteAdmClientNew,