[libvirt] [PATCH 2/2] libxl: s/virDomainObjListFindByID/virDomainObjListFindByUUID/

Jim Fehlig jfehlig at suse.com
Fri Apr 24 19:09:55 UTC 2015


Michal Privoznik wrote:
> Like in previous commit, lets use FindByUUID() instead of
> ListFindByID(). The latter is suboptimal as it needs to iterate over
> each item in the domain object list, lock it and compare the IDs. If
> an object is already locked, we must wait until it's unlocked. During
> this wait, we keep the whole list locked, and potentially block other
> thread trying to access the list.
>
> There's no such problem with ListFindByUUID() since UUID is the key to
> the hash table, therefore it can be looked up without need for locking
> each single domain object.
>
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  src/libxl/libxl_domain.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
> index 3039427..55d1313 100644
> --- a/src/libxl/libxl_domain.c
> +++ b/src/libxl/libxl_domain.c
> @@ -494,7 +494,7 @@ libxlDomainEventHandler(void *data, VIR_LIBXL_EVENT_CONST libxl_event *event)
>      if (xl_reason == LIBXL_SHUTDOWN_REASON_SUSPEND)
>          goto error;
>  
> -    vm = virDomainObjListFindByID(driver->domains, event->domid);
> +    vm = virDomainObjListFindByUUID(driver->domains, event->domuuid.uuid);
>   

Sadly, this won't work. event->domuuid is not populated when libxl
invokes the event handler

Breakpoint 1, libxlDomainEventHandler (data=0x7fffe0012310,
event=0x55555588abb0)
at libxl/libxl_domain.c:477
(gdb) p event->domuuid
$2 = {uuid = '\000' <repeats 15 times>}

Regards,
Jim

>      if (!vm) {
>          VIR_INFO("Received event for unknown domain ID %d", event->domid);
>          goto error;
>   




More information about the libvir-list mailing list