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

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to