[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