• P
    qemu: fix concurrency crash bug in snapshot revert · d75f865f
    Pavel Mores 提交于
    This commit aims to fix
    
    https://bugzilla.redhat.com/show_bug.cgi?id=1610207
    
    The cause was apparently incorrect handling of jobs in snapshot
    revert code which allowed a thread executing snapshot delete to
    begin job while snapshot revert was still running on another
    thread. The snapshot delete thread then waited on a condition
    variable in qemuMonitorSend() while the revert thread finished,
    changing (and effectively corrupting) the qemuMonitor structure
    under the delete thread which led to its crash.
    
    The incorrect handling of jobs in revert code was due to the fact
    that although qemuDomainRevertToSnapshot() correctly begins a job
    at the start, the job was implicitly ended when qemuProcessStop()
    was called because the job lives in the QEMU driver's private
    data (qemuDomainObjPrivate) that was purged during
    qemuProcessStop().
    
    This fix prevents qemuProcessStop() from clearing jobs as the
    idea of qemuProcessStop() clearing jobs seems wrong in the first
    place. It was (inadvertently) introduced in commit
    888aa4b6, which is effectively reverted by
    the second hunk of this commit. To preserve the desired effects
    of the faulty commit, the first hunk is included as suggested by
    Michal.
    Signed-off-by: NPavel Mores <pmores@redhat.com>
    Reviewed-by: NMichal Privoznik <mprivozn@redhat.com>
    d75f865f
qemu_domain.c 491.3 KB