]> xenbits.xensource.com Git - libvirt.git/commitdiff
Fix exiting of libvirt_lxc program on container quit
authorDaniel P. Berrange <berrange@redhat.com>
Thu, 22 Nov 2012 16:45:39 +0000 (16:45 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Fri, 23 Nov 2012 10:11:56 +0000 (10:11 +0000)
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@redhat.com>
src/lxc/lxc_controller.c

index 6fffd68d62bb90e9d402ff095c51490d2f3823a0..a9d2d4045f120e587b2b2a63d459a39d21ef62f6 100644 (file)
@@ -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: