From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52936) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V3ilH-0002qk-Jh for qemu-devel@nongnu.org; Mon, 29 Jul 2013 04:25:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V3il8-0004yY-8t for qemu-devel@nongnu.org; Mon, 29 Jul 2013 04:24:59 -0400 Received: from e23smtp09.au.ibm.com ([202.81.31.142]:38443) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V3il6-0004to-7E for qemu-devel@nongnu.org; Mon, 29 Jul 2013 04:24:50 -0400 Received: from /spool/local by e23smtp09.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 30 Jul 2013 05:19:40 +1000 Received: from d23relay04.au.ibm.com (d23relay04.au.ibm.com [9.190.234.120]) by d23dlp02.au.ibm.com (Postfix) with ESMTP id 446402BB004F for ; Mon, 29 Jul 2013 18:24:30 +1000 (EST) Received: from d23av01.au.ibm.com (d23av01.au.ibm.com [9.190.234.96]) by d23relay04.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r6T88vje2228596 for ; Mon, 29 Jul 2013 18:09:00 +1000 Received: from d23av01.au.ibm.com (loopback [127.0.0.1]) by d23av01.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r6T8OQxD031882 for ; Mon, 29 Jul 2013 18:24:26 +1000 Message-ID: <51F626B4.2090303@linux.vnet.ibm.com> Date: Mon, 29 Jul 2013 16:24:20 +0800 From: Wenchao Xia MIME-Version: 1.0 References: <1374765505-14356-1-git-send-email-stefanha@redhat.com> <1374765505-14356-5-git-send-email-stefanha@redhat.com> In-Reply-To: <1374765505-14356-5-git-send-email-stefanha@redhat.com> Content-Type: text/plain; charset=GB2312 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v6 04/18] tests: adjust test-aio to new aio_poll() semantics List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi Cc: Kevin Wolf , Ping Fan Liu , qemu-devel@nongnu.org, Michael Roth , alex@alex.org.uk, Paolo Bonzini Reviewed-by: Wenchao Xia > aio_poll(ctx, true) will soon block if any fd handlers have been set. > Previously it would only block when .io_flush() returned true. > > This means that callers must check their wait condition *before* > aio_poll() to avoid deadlock. > > Reviewed-by: Paolo Bonzini > Signed-off-by: Stefan Hajnoczi > --- > tests/test-aio.c | 26 +++++++++++++++++--------- > 1 file changed, 17 insertions(+), 9 deletions(-) > > diff --git a/tests/test-aio.c b/tests/test-aio.c > index c173870..20bf5e6 100644 > --- a/tests/test-aio.c > +++ b/tests/test-aio.c > @@ -15,6 +15,13 @@ > > AioContext *ctx; > > +typedef struct { > + EventNotifier e; > + int n; > + int active; > + bool auto_set; > +} EventNotifierTestData; > + > /* Wait until there are no more BHs or AIO requests */ > static void wait_for_aio(void) > { > @@ -23,6 +30,14 @@ static void wait_for_aio(void) > } > } > > +/* Wait until event notifier becomes inactive */ > +static void wait_until_inactive(EventNotifierTestData *data) > +{ > + while (data->active > 0) { > + aio_poll(ctx, true); > + } > +} > + > /* Simple callbacks for testing. */ > > typedef struct { > @@ -50,13 +65,6 @@ static void bh_delete_cb(void *opaque) > } > } > > -typedef struct { > - EventNotifier e; > - int n; > - int active; > - bool auto_set; > -} EventNotifierTestData; > - > static int event_active_cb(EventNotifier *e) > { > EventNotifierTestData *data = container_of(e, EventNotifierTestData, e); > @@ -281,7 +289,7 @@ static void test_flush_event_notifier(void) > g_assert_cmpint(data.active, ==, 9); > g_assert(aio_poll(ctx, false)); > > - wait_for_aio(); > + wait_until_inactive(&data); > g_assert_cmpint(data.n, ==, 10); > g_assert_cmpint(data.active, ==, 0); > g_assert(!aio_poll(ctx, false)); > @@ -325,7 +333,7 @@ static void test_wait_event_notifier_noflush(void) > g_assert_cmpint(data.n, ==, 2); > > event_notifier_set(&dummy.e); > - wait_for_aio(); > + wait_until_inactive(&dummy); > g_assert_cmpint(data.n, ==, 2); > g_assert_cmpint(dummy.n, ==, 1); > g_assert_cmpint(dummy.active, ==, 0); > -- Best Regards Wenchao Xia