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

Martin Kletzander mkletzan at redhat.com
Fri Nov 23 08:31:13 UTC 2012


On 11/22/2012 05:48 PM, Daniel P. Berrange wrote:
> 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:
> 

ACK,

Martin




More information about the libvir-list mailing list