• C
    Fix log locking problem when using fork() in the library · cd0ef0e0
    Cole Robinson 提交于
    Ad pointed out by Dan Berrange:
    So if some thread in libvirtd is currently executing a logging call,
    while another thread calls virExec(), that other thread no longer
    exists in the child, but its lock is never released. So when the
    child then does virLogReset() it deadlocks.
    
    The only way I see to address this, is for the parent process to call
    virLogLock(), immediately before fork(), and then virLogUnlock()
    afterwards in both parent & child. This will ensure that no other
    thread
    can be holding the lock across fork().
    
    * src/util/logging.[ch] src/libvirt_private.syms: export virLogLock() and
      virLogUnlock()
    * src/util/util.c: lock just before forking and unlock just after - in
      both parent and child.
    cd0ef0e0
libvirt_private.syms 12.5 KB