[libvirt] [PATCH 4/6] Fix exiting of libvirt_lxc program on container quit

Daniel P. Berrange berrange at redhat.com
Thu Nov 22 16:48:31 UTC 2012


From: "Daniel P. Berrange" <berrange at redhat.com>

The virLXCControllerClientCloseHook method was mistakenly
assuming that the private data associated with the network
client was the virLXCControllerPtr. In fact it was just a
dummy int, so we were derefencing a bogus struct. The
frequent result of this was that we would never quit, because
we tried to arm a non-existant timer.

Fix the code by removing the dummy private data and just
using the virLXCControllerPtr instance as private data

Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
---
 src/lxc/lxc_controller.c | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)

diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c
index 6fffd68..a9d2d40 100644
--- a/src/lxc/lxc_controller.c
+++ b/src/lxc/lxc_controller.c
@@ -578,19 +578,14 @@ static void virLXCControllerClientCloseHook(virNetServerClientPtr client)
 
 static void virLXCControllerClientPrivateFree(void *data)
 {
-    VIR_FREE(data);
+    virLXCControllerPtr ctrl = data;
+    VIR_DEBUG("Got private data free %p", ctrl);
 }
 
 static void *virLXCControllerClientPrivateNew(virNetServerClientPtr client,
                                               void *opaque)
 {
     virLXCControllerPtr ctrl = opaque;
-    int *dummy;
-
-    if (VIR_ALLOC(dummy) < 0) {
-        virReportOOMError();
-        return NULL;
-    }
 
     virNetServerClientSetCloseHook(client, virLXCControllerClientCloseHook);
     VIR_DEBUG("Got new client %p", client);
@@ -600,7 +595,7 @@ static void *virLXCControllerClientPrivateNew(virNetServerClientPtr client,
         virLXCControllerEventSendInit(ctrl, ctrl->initpid);
     ctrl->firstClient = false;
 
-    return dummy;
+    return ctrl;
 }
 
 
@@ -1327,7 +1322,7 @@ virLXCControllerEventSendExit(virLXCControllerPtr ctrl,
 {
     virLXCProtocolExitEventMsg msg;
 
-    VIR_DEBUG("Exit status %d", exitstatus);
+    VIR_DEBUG("Exit status %d (client=%p)", exitstatus, ctrl->client);
     memset(&msg, 0, sizeof(msg));
     switch (exitstatus) {
     case 0:
-- 
1.7.11.2




More information about the libvir-list mailing list