tests/test-bdrv-drain: Fix too late qemu_event_reset()
PATCH 1/1 tests/test-bdrv-drain: Fix too late qemu_event_reset()
qemu_event_reset() must be called before the AIO request in a different iothread is submitted. Otherwise the request could be completed before we do the qemu_event_reset() and the test would hang in qemu_event_wait().
Signed-off-by Kevin Wolf <[email protected]>
--- tests/test-bdrv-drain.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
tests/test-bdrv-drain.c +2 -2
@@ -694,6 +694,8 @@ static void test_iothread_common(enum drain_type drain_type, int drain_thread) s->bh_indirection_ctx = ctx_b; aio_ret = -EINPROGRESS ; +qemu_event_reset (&done_event); +if (drain_thread ==0 ) { acb =blk_aio_preadv (blk,0 , &qiov,0 , test_iothread_aio_cb, &aio_ret); }else {
@@ -723,7 +725,6 @@ static void test_iothread_common(enum drain_type drain_type, int drain_thread)* but the drain in this thread can continue immediately after * bdrv_dec_in_flight() and aio_ret might be assigned only slightly * later. */ -qemu_event_reset (&done_event);do_drain_begin (drain_type, bs); g_assert_cmpint(bs->in_flight, ==, 0);
@@ -743,7 +744,6 @@ static void test_iothread_common(enum drain_type drain_type, int drain_thread) }break ;case 1 : -qemu_event_reset (&done_event);aio_bh_schedule_oneshot (ctx_a, test_iothread_drain_entry, &data);qemu_event_wait (&done_event);break ;
Signature · 1 line
2.13.6
Quoted 9 lines · Kevin Wolf
qemu_event_reset()must be called before the AIO request in a different iothread is submitted. Otherwise the request could be completed before we do theqemu_event_reset()and the test would hang inqemu_event_wait().Signed-off-by Kevin Wolf <[email protected]>--- tests/test-bdrv-drain.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Reviewed-by Max Reitz <[email protected]>
Tested-by Max Reitz <[email protected]>
(I still got the same hang as the one you just reported, though -- but it happens just very rarely, so it's definitely better.)