[libvirt] [PATCH v2 0/3] libvirtd: fix crashes on termination
Nikolay Shirokovskiy
nshirokovskiy at virtuozzo.com
Tue Oct 4 14:27:43 UTC 2016
diff from v1
============
1. drop patches 1-2 of v1.
As to "event loop" patch seems nobody has "production" problems due to leaks on
termination. Turning freeing callback objects registered in event loop on after
it is finished has an impact that is hard to predict. Different parts of
libvirt use event loop and the patch can trigger paths that were not passed
before. Let's wait for real issue)
"Breaking cyclic dependency" patch will not reach its target without "event
loop patch" anyway - daemon object will still leak in certain situation so
let's drop it too.
2. add code commenting patch
It documents another reason why we should not free callback object
synchronously in remove handle/timeout function besides Dan's objection:
https://www.redhat.com/archives/libvir-list/2016-September/msg01005.html
Reproducing:
============
Crash situation of patches 1-2 can easily be simulated, just
patch libvirt:
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 30a2830..f6b71d6 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -4515,6 +4515,8 @@ processMonitorEOFEvent(virQEMUDriverPtr driver,
unsigned int stopFlags = 0;
virObjectEventPtr event = NULL;
+ sleep(3);
+
if (qemuProcessBeginStopJob(driver, vm, QEMU_JOB_DESTROY, true) < 0)
return;
then when it is up and running and there is also a qemu domain running:
kill -9 $QEMU_DOMAIN && pkill libvirtd
By the way there should be no admin connection at the moment or crash
will not happen due to leaks.
Nikolay Shirokovskiy (3):
daemon: keep daemon until all hypervisors drivers are cleaned up
qemu: first wait all workers finish on state cleanup
util: event loop: document another reason to defer deletion
daemon/libvirtd.c | 4 +++-
src/qemu/qemu_driver.c | 2 +-
src/util/vireventpoll.c | 7 +++++++
3 files changed, 11 insertions(+), 2 deletions(-)
--
1.8.3.1
More information about the libvir-list
mailing list