[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