[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 04/18] tests: adjust test-aio to new aio_poll() seman
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PULL 04/18] tests: adjust test-aio to new aio_poll() semantics |
Date: |
Mon, 19 Aug 2013 16:17:43 +0200 |
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 <address@hidden>
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
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);
--
1.8.3.1
- [Qemu-devel] [PULL v2 00/18] Block patches, Stefan Hajnoczi, 2013/08/19
- [Qemu-devel] [PULL 03/18] dataplane/virtio-blk: check exit conditions before aio_poll(), Stefan Hajnoczi, 2013/08/19
- [Qemu-devel] [PULL 02/18] block: stop relying on io_flush() in bdrv_drain_all(), Stefan Hajnoczi, 2013/08/19
- [Qemu-devel] [PULL 05/18] tests: adjust test-thread-pool to new aio_poll() semantics, Stefan Hajnoczi, 2013/08/19
- [Qemu-devel] [PULL 01/18] block: ensure bdrv_drain_all() works during bdrv_delete(), Stefan Hajnoczi, 2013/08/19
- [Qemu-devel] [PULL 04/18] tests: adjust test-aio to new aio_poll() semantics,
Stefan Hajnoczi <=
- [Qemu-devel] [PULL 07/18] block/curl: drop curl_aio_flush(), Stefan Hajnoczi, 2013/08/19
- [Qemu-devel] [PULL 06/18] aio: stop using .io_flush(), Stefan Hajnoczi, 2013/08/19
- [Qemu-devel] [PULL 09/18] block/iscsi: drop iscsi_process_flush(), Stefan Hajnoczi, 2013/08/19
- [Qemu-devel] [PULL 08/18] block/gluster: drop qemu_gluster_aio_flush_cb(), Stefan Hajnoczi, 2013/08/19
- [Qemu-devel] [PULL 10/18] block/linux-aio: drop qemu_laio_completion_cb(), Stefan Hajnoczi, 2013/08/19
- [Qemu-devel] [PULL 11/18] block/nbd: drop nbd_have_request(), Stefan Hajnoczi, 2013/08/19
- [Qemu-devel] [PULL 12/18] block/rbd: drop qemu_rbd_aio_flush_cb(), Stefan Hajnoczi, 2013/08/19
- [Qemu-devel] [PULL 17/18] tests: drop event_active_cb(), Stefan Hajnoczi, 2013/08/19