tests: adjust test-aio to new aio_poll() semantics
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 <pbonzini@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
bf0da4df83
commit
24d1a6d9d5
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user