[libvirt] [PATCH V2] libxl: queue domain event earlier in shutdown handler

Michal Privoznik mprivozn at redhat.com
Tue Feb 25 08:56:40 UTC 2014


On 24.02.2014 19:06, Jim Fehlig wrote:
> The shutdown handler may restart a domain when handling a reboot
> event or when <on_*> is set to 'restart'.  Restarting consists of
> calling libxlVmCleanup followed by libxlVmStart.  libxlVmStart will
> emit a VIR_DOMAIN_EVENT_STARTED event, but the SHUTDOWN event is
> not emitted until exiting the shutdown handler, after the STARTED
> event.
>
> This patch changes the logic a bit to queue the event at the start
> of the shutdown action, ensuring it is queued before any subsequent
> events that may be generated while executing the shutdown action.
>
> Signed-off-by: Jim Fehlig <jfehlig at suse.com>
> ---
>
> V2:
> Enqueue any pending events at the beginning of the shutdown action
> labels, as suggested by Michal Privoznik
>
> https://www.redhat.com/archives/libvir-list/2014-February/msg01446.html
>
>   src/libxl/libxl_driver.c | 8 ++++++++
>   1 file changed, 8 insertions(+)
>
> diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
> index f7379b5..a79efcb 100644
> --- a/src/libxl/libxl_driver.c
> +++ b/src/libxl/libxl_driver.c
> @@ -473,6 +473,10 @@ libxlDomainShutdownThread(void *opaque)
>       }
>
>   destroy:
> +    if (dom_event) {
> +        libxlDomainEventQueue(driver, dom_event);
> +        dom_event = NULL;
> +    }
>       libxl_domain_destroy(ctx, vm->def->id, NULL);
>       if (libxlVmCleanupJob(driver, vm, reason)) {
>           if (!vm->persistent) {
> @@ -483,6 +487,10 @@ destroy:
>       goto cleanup;
>
>   restart:
> +    if (dom_event) {
> +        libxlDomainEventQueue(driver, dom_event);
> +        dom_event = NULL;
> +    }
>       libxl_domain_destroy(ctx, vm->def->id, NULL);
>       libxlVmCleanupJob(driver, vm, VIR_DOMAIN_SHUTOFF_SHUTDOWN);
>       libxlVmStart(driver, vm, 0, -1);
>

ACK

Michal




More information about the libvir-list mailing list