[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 3/5] coroutines: abort if we try to enter a stil
From: |
Jeff Cody |
Subject: |
Re: [Qemu-devel] [PATCH 3/5] coroutines: abort if we try to enter a still-sleeping coroutine |
Date: |
Mon, 20 Nov 2017 18:31:06 -0500 |
User-agent: |
Mutt/1.5.24 (2015-08-30) |
On Tue, Nov 21, 2017 at 12:13:46AM +0100, Paolo Bonzini wrote:
> On 21/11/2017 00:08, Jeff Cody wrote:
> > @@ -34,6 +36,7 @@ void coroutine_fn co_aio_sleep_ns(AioContext *ctx,
> > QEMUClockType type,
> > CoSleepCB sleep_cb = {
> > .co = qemu_coroutine_self(),
> > };
> > + if (sleep_cb.co->sleeping == 1 || sleep_cb.co->scheduled == 1) {
> > + fprintf(stderr, "Cannot sleep a co-routine that is already sleeping
> > "
> > + " or scheduled\n");
> > + abort();
> > + }
> > + sleep_cb.co->sleeping = 1;
> > sleep_cb.ts = aio_timer_new(ctx, type, SCALE_NS, co_sleep_cb,
> > &sleep_cb);
> > timer_mod(sleep_cb.ts, qemu_clock_get_ns(type) + ns);
> > qemu_coroutine_yield();
>
> I understand that this was just an example and not the actual patch, but
> I'll still point out that this loses the benefit (better error message)
> of keeping the flags separate.
>
> What do you think about making "scheduled" a const char * and assigning
> __func__ to it (i.e. either "aio_co_schedule" or "co_aio_sleep_ns")?
>
Ohhh, nice. I'll spin a v2 with that, and merge patches 3 and 5 together.
And then maybe for 2.12 we can look at making it a fsm, like Stefan
suggested (or somehow make coroutine entry thread safe and idempotent).
Jeff
- Re: [Qemu-devel] [Qemu-block] [PATCH 2/5] coroutine: abort if we try to enter coroutine scheduled for another ctx, (continued)
[Qemu-devel] [PATCH 5/5] qemu-iotest: add test for blockjob coroutine race condition, Jeff Cody, 2017/11/19