[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH for-2.11] tests-aio-multithread: fix /aio/multi/
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH for-2.11] tests-aio-multithread: fix /aio/multi/schedule race condition |
Date: |
Tue, 7 Nov 2017 12:29:18 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 |
On 06/11/2017 20:02, Stefan Hajnoczi wrote:
> test_multi_co_schedule_entry() set to_schedule[id] in the final loop
> iteration before terminating the coroutine. There is a race condition
> where the main thread attempts to enter the terminating or terminated
> coroutine when signalling coroutines to stop:
>
> atomic_mb_set(&now_stopping, true);
> for (i = 0; i < NUM_CONTEXTS; i++) {
> ctx_run(i, finish_cb, NULL); <--- enters dead coroutine!
> to_schedule[i] = NULL;
> }
>
> Make sure only to set to_schedule[id] if this coroutine really needs to
> be scheduled!
>
> Reported-by: "R.Nageswara Sastry" <address@hidden>
> Signed-off-by: Stefan Hajnoczi <address@hidden>
> ---
> This patch is appropriate for the QEMU 2.11 release to eliminate
> spurious test failures.
>
> tests/test-aio-multithread.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/tests/test-aio-multithread.c b/tests/test-aio-multithread.c
> index 549d784915..d396185972 100644
> --- a/tests/test-aio-multithread.c
> +++ b/tests/test-aio-multithread.c
> @@ -144,17 +144,16 @@ static void finish_cb(void *opaque)
> static coroutine_fn void test_multi_co_schedule_entry(void *opaque)
> {
> g_assert(to_schedule[id] == NULL);
> - atomic_mb_set(&to_schedule[id], qemu_coroutine_self());
>
> while (!atomic_mb_read(&now_stopping)) {
> int n;
>
> n = g_test_rand_int_range(0, NUM_CONTEXTS);
> schedule_next(n);
> +
> + atomic_mb_set(&to_schedule[id], qemu_coroutine_self());
> qemu_coroutine_yield();
> -
> g_assert(to_schedule[id] == NULL);
> - atomic_mb_set(&to_schedule[id], qemu_coroutine_self());
> }
> }
>
>
Reviewed-by: Paolo Bonzini <address@hidden>
Thanks,
Paolo