On Mon, Nov 20, 2017 at 11:43:34AM +0000, Stefan Hajnoczi wrote: > On Sun, Nov 19, 2017 at 09:46:44PM -0500, Jeff Cody wrote: > > diff --git a/include/qemu/coroutine_int.h b/include/qemu/coroutine_int.h > > index 931cdc9..b071217 100644 > > --- a/include/qemu/coroutine_int.h > > +++ b/include/qemu/coroutine_int.h > > @@ -56,6 +56,8 @@ struct Coroutine { > > > > int scheduled; > > > > + int sleeping; > > s/int/bool/ >
OK. > BTW an alternative to adding individual bools is to implement a finite > state machine for the entire coroutine lifecycle. A single function can > validate all state transitions: > > void check_state_transition(CoState old, CoState new, > const char *action) > { > const char *errmsg = fsm[old][new]; > if (!errmsg) { > return; /* valid transition! */ > } > > fprintf(stderr, "Cannot %s coroutine from %s state\n", > action, state_name[old]); > abort(); > } > > Specifying fsm[][] forces us to think through all possible state > transitions. This approach is proactive whereas adding bool flags is > reactive since it only covers a subset of states that were encountered > after crashes. I'm not sure if it's worth it though :). Interesting idea; maybe more for 2.12 instead of 2.11, though? Jeff