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@xxxxxxxxxx> > --- > 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; > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list