From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59939) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UsCFV-0002zX-FH for qemu-devel@nongnu.org; Thu, 27 Jun 2013 09:28:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UsCFU-0001TT-1F for qemu-devel@nongnu.org; Thu, 27 Jun 2013 09:28:33 -0400 Received: from mail-bk0-x230.google.com ([2a00:1450:4008:c01::230]:65468) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UsCFT-0001TF-Qp for qemu-devel@nongnu.org; Thu, 27 Jun 2013 09:28:31 -0400 Received: by mail-bk0-f48.google.com with SMTP id jf17so310343bkc.35 for ; Thu, 27 Jun 2013 06:28:31 -0700 (PDT) Sender: Paolo Bonzini Message-ID: <51CC3DF8.8030103@redhat.com> Date: Thu, 27 Jun 2013 15:28:24 +0200 From: Paolo Bonzini MIME-Version: 1.0 References: <1371210243-6099-1-git-send-email-stefanha@redhat.com> <1371210243-6099-4-git-send-email-stefanha@redhat.com> In-Reply-To: <1371210243-6099-4-git-send-email-stefanha@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v4 03/17] 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 , Anthony Liguori , Ping Fan Liu , qemu-devel@nongnu.org Il 14/06/2013 13:43, Stefan Hajnoczi ha scritto: > 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. > > 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); > Reviewed-by: Paolo Bonzini