From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anthony Liguori Subject: Re: [Qemu-devel] [PATCH 06/21] vl: add a tmp pointer so that a handler can delete the entry to which it belongs. Date: Wed, 08 Dec 2010 08:22:15 -0600 Message-ID: <4CFF9497.3090001@linux.vnet.ibm.com> References: <1290665220-26478-1-git-send-email-tamura.yoshiaki@lab.ntt.co.jp> <1290665220-26478-7-git-send-email-tamura.yoshiaki@lab.ntt.co.jp> <20101208070358.GA3303@valinux.co.jp> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Isaku Yamahata , kvm@vger.kernel.org, qemu-devel@nongnu.org, Anthony Liguori , mtosatti@redhat.com, ananth@in.ibm.com, ohmura.kei@lab.ntt.co.jp, dlaor@redhat.com, vatsa@linux.vnet.ibm.com, avi@redhat.com, psuriset@linux.vnet.ibm.com, stefanha@linux.vnet.ibm.com To: Yoshiaki Tamura Return-path: Received: from e35.co.us.ibm.com ([32.97.110.153]:41558 "EHLO e35.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755194Ab0LHOWX (ORCPT ); Wed, 8 Dec 2010 09:22:23 -0500 Received: from d03relay03.boulder.ibm.com (d03relay03.boulder.ibm.com [9.17.195.228]) by e35.co.us.ibm.com (8.14.4/8.13.1) with ESMTP id oB8EA3Vd005223 for ; Wed, 8 Dec 2010 07:10:03 -0700 Received: from d03av05.boulder.ibm.com (d03av05.boulder.ibm.com [9.17.195.85]) by d03relay03.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id oB8EMMci113108 for ; Wed, 8 Dec 2010 07:22:22 -0700 Received: from d03av05.boulder.ibm.com (loopback [127.0.0.1]) by d03av05.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id oB8EMIPt009356 for ; Wed, 8 Dec 2010 07:22:22 -0700 In-Reply-To: Sender: kvm-owner@vger.kernel.org List-ID: On 12/08/2010 02:11 AM, Yoshiaki Tamura wrote: > 2010/12/8 Isaku Yamahata: > >> QLIST_FOREACH_SAFE? >> > Thanks! So, it should be, > > QLIST_FOREACH_SAFE(e,&vm_change_state_head, entries, ne) { > e->cb(e->opaque, running, reason); > } > > I'll put it in the next spin. > This is still brittle though because it only allows the current handler to delete itself. A better approach is to borrow the technique we use with file descriptors (using a deleted flag) as that is robust against deletion of any elements in a handler. Regards, Anthony Liguori > Yoshi > > >> On Thu, Nov 25, 2010 at 03:06:45PM +0900, Yoshiaki Tamura wrote: >> >>> By copying the next entry to a tmp pointer, >>> qemu_del_vm_change_state_handler() can be called in the handler. >>> >>> Signed-off-by: Yoshiaki Tamura >>> --- >>> vl.c | 5 +++-- >>> 1 files changed, 3 insertions(+), 2 deletions(-) >>> >>> diff --git a/vl.c b/vl.c >>> index 805e11f..6b6aec0 100644 >>> --- a/vl.c >>> +++ b/vl.c >>> @@ -1073,11 +1073,12 @@ void qemu_del_vm_change_state_handler(VMChangeStateEntry *e) >>> >>> void vm_state_notify(int running, int reason) >>> { >>> - VMChangeStateEntry *e; >>> + VMChangeStateEntry *e, *ne; >>> >>> trace_vm_state_notify(running, reason); >>> >>> - for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) { >>> + for (e = vm_change_state_head.lh_first; e; e = ne) { >>> + ne = e->entries.le_next; >>> e->cb(e->opaque, running, reason); >>> } >>> } >>> -- >>> 1.7.1.2 >>> >>> >>> >> -- >> yamahata >> -- >> To unsubscribe from this list: send the line "unsubscribe kvm" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> >>