From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jim Fehlig Subject: Re: [libvirt] [PATCH 2/2] libxl: s/virDomainObjListFindByID/virDomainObjListFindByUUID/ Date: Fri, 24 Apr 2015 13:09:55 -0600 Message-ID: <553A9503.2070701@suse.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Michal Privoznik Cc: libvir-list@redhat.com, xen-devel List-Id: xen-devel@lists.xenproject.org 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 > --- > 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' } Regards, Jim > if (!vm) { > VIR_INFO("Received event for unknown domain ID %d", event->domid); > goto error; >