
Am Dienstag 08 März 2011 03:48:55 schrieb Jim Fehlig:
Add a new xen driver based on libxenlight [1], which is the primary toolstack starting with Xen 4.1.0. The driver is stateful, runs privileged only, and is accessed with libxl:/// URI.
V4: - Handle restart of libvirtd, reconnecting to previously started domains - Rebased to current master - Tested against Xen 4.1 RC7-pre (c/s 22961:c5d121fd35c0)
V3: - Reserve vnc port within driver when autoport=yes
V2: - Update to Xen 4.1 RC6-pre (c/s 22940:5a4710640f81) - Rebased to current master - Plug memory leaks found by Stefano Stabellini and valgrind - Handle SHUTDOWN_crash domain death event
+static void +libxlDomainObjPrivateFree(void *data) +{ + libxlDomainObjPrivatePtr priv = data; + + if (priv->dWaiter) { + libxl_free_waiter(priv->dWaiter); + VIR_FREE(priv->dWaiter); + } + libxl_ctx_free(&priv->ctx); + VIR_FREE(priv); +}
When destroying a domain the event handler is called after the domain object is freed and causes a segfault for me. The following patch fixes this. diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index d137474..303c808 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -85,7 +85,13 @@ libxlDomainObjPrivateFree(void *data) { libxlDomainObjPrivatePtr priv = data; + if (priv->waiterFD >= 0) { + if (priv->eventHdl) + virEventRemoveHandle(priv->eventHdl); + VIR_FORCE_CLOSE(priv->waiterFD); + } if (priv->dWaiter) { + libxl_stop_waiting(&priv->ctx, priv->dWaiter); libxl_free_waiter(priv->dWaiter); VIR_FREE(priv->dWaiter); }