diff --git a/src/karton.cpp b/src/karton.cpp index c377dd7..f9b5f7b 100644 --- a/src/karton.cpp +++ b/src/karton.cpp @@ -35,11 +35,17 @@ Karton::Karton(QObject *parent) Karton::~Karton() { + // Children run after this body. Deregister and free domains while the connection is open, + // or virConnectDomainEventDeregisterAny deadlocks on the libvirt lock (bug 56270). + delete m_monitor; + m_monitor = nullptr; + cleanupDomainViewer(); + while (!m_domains.isEmpty()) + delete m_domains.takeLast(); if (m_conn) { virConnectClose(m_conn); m_conn = nullptr; } - cleanupDomainViewer(); } Karton *Karton::self()