]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemuDomainObjBeginJob: Don't account DESTROY job to maxQueuedJobs
authorMichal Privoznik <mprivozn@redhat.com>
Mon, 5 Mar 2018 09:13:29 +0000 (10:13 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 7 Mar 2018 11:27:03 +0000 (12:27 +0100)
When trying to destroy a domain (e.g. because we've seen EOF on
the monitor) we try to acquire QEMU_JOB_DESTROY. However, if
max_queued is set in qemu.conf this may fail and since our code
doesn't count on that we will still report domain as active even
though the qemu process is long gone. More specifically, if we've
seen EOF on the monitor, qemuProcessHandleMonitorEOF() is called
which sends MONITOR_EOF job to the event worker pool and
unregisters monitor from the event loop. The worker pool calls
processMonitorEOFEvent() which tries to set job which may fail
due to the limit as described above.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_domain.c

index 8b4efc82dee4c98b5ec271fb14246bde9da63cc0..ee02ecd0cd5767b36356bd25539a30a74bffe0cd 100644 (file)
@@ -5401,7 +5401,8 @@ qemuDomainObjBeginJobInternal(virQEMUDriverPtr driver,
     then = now + QEMU_JOB_WAIT_TIME;
 
  retry:
-    if (cfg->maxQueuedJobs &&
+    if ((!async && job != QEMU_JOB_DESTROY) &&
+        cfg->maxQueuedJobs &&
         priv->jobs_queued > cfg->maxQueuedJobs) {
         goto error;
     }