]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemuBackupJobTerminate: Don't calculate backup job stats if VM isn't active
authorPeter Krempa <pkrempa@redhat.com>
Thu, 25 Feb 2021 12:33:39 +0000 (13:33 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 1 Mar 2021 14:44:47 +0000 (15:44 +0100)
If the VM isn't active calculating the job stats doesn't make sense.
Additionally this prevents a crash of libvirtd if qemu terminates while
libvirt wasn't running:

Thread 28 "init-backup-tes" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffb9310640 (LWP 3201116)]
qemuDomainJobInfoUpdateTime (jobInfo=0x0) at ../../../libvirt/src/qemu/qemu_domainjob.c:275
275     if (!jobInfo->started)
(gdb) bt
 #0  qemuDomainJobInfoUpdateTime (jobInfo=0x0) at ../../../libvirt/src/qemu/qemu_domainjob.c:275
 #1  0x00007fffcba1a12d in qemuBackupJobTerminate (vm=0x7fff9c1bc840, jobstatus=QEMU_DOMAIN_JOB_STATUS_CANCELED) at ../../../libvirt/src/qemu/qemu_backup.c:563
 #2  0x00007fffcbaefcae in qemuProcessStop
    (driver=0x7fff9c144ff0, vm=0x7fff9c1bc840, reason=VIR_DOMAIN_SHUTOFF_DAEMON, asyncJob=QEMU_ASYNC_JOB_NONE, flags=<optimized out>)
    at ../../../libvirt/src/qemu/qemu_process.c:7812
 #3  0x00007fffcbaf2a10 in qemuProcessReconnect (opaque=<optimized out>) at ../../../libvirt/src/qemu/qemu_process.c:8578
 #4  0x00007ffff7c46bb5 in virThreadHelper (data=<optimized out>) at ../../../libvirt/src/util/virthread.c:233
 #5  0x00007ffff6e453f9 in start_thread () at /lib64/libpthread.so.0
 #6  0x00007ffff766fb53 in clone () at /lib64/libc.so.6

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_backup.c

index d3d98c1d6a7a0ca561b3a8ca31c3838b82583d02..6ce29c28e1b9a2fcc774d81b0d3f4c948cd3aafc 100644 (file)
@@ -583,6 +583,9 @@ qemuBackupJobTerminate(virDomainObjPtr vm,
         }
     }
 
+    if (!virDomainObjIsActive(vm))
+        return;
+
     qemuDomainJobInfoUpdateTime(priv->job.current);
 
     g_clear_pointer(&priv->job.completed, qemuDomainJobInfoFree);