• D
    Only add the timer when a callback is registered · 707781fe
    Daniel P. Berrange 提交于
    The lifetime of the virDomainEventState object is tied to
    the lifetime of the driver, which in stateless drivers is
    tied to the lifetime of the virConnectPtr.
    
    If we add & remove a timer when allocating/freeing the
    virDomainEventState object, we can get a situation where
    the timer still triggers once after virDomainEventState
    has been freed. The timeout callback can't keep a ref
    on the event state though, since that would be a circular
    reference.
    
    The trick is to only register the timer when a callback
    is registered with the event state & remove the timer
    when the callback is unregistered.
    
    The demo for the bug is to run
    
      while true ; do date ; ../tools/virsh -q -c test:///default 'shutdown test; undefine test; dominfo test' ; done
    
    prior to this fix, it will frequently hang and / or
    crash, or corrupt memory
    707781fe
qemu_driver.c 358.3 KB