Il lun 14 mar 2022, 15:37 Stefan Hajnoczi <stefa...@redhat.com> ha scritto:
> On Mon, Mar 14, 2022 at 10:32:01AM +0100, Paolo Bonzini wrote: > > +// ------------------------ > > + > > +// CoroutineFn does not even need anything more than what > > +// BaseCoroutine provides, so it's just a type alias. The magic > > +// is all in ValuePromise<T>. > > +// > > +// Suspended CoroutineFns are chained between themselves. Whenever a > > +// coroutine is suspended, all those that have done a co_await are > > +// also suspended, and whenever a coroutine finishes, it has to > > +// check if its parent can now be resumed. > > +// > > +// The two auxiliary classes Awaiter and ResumeAndFinish take > > +// care of the two sides of this. Awaiter's await_suspend() stores > > +// the parent coroutine into ValuePromise; ResumeAndFinish's runs > > +// after a coroutine returns, and resumes the parent coroutine. > > + > > +template<typename T> struct ValuePromise; > > +template<typename T> > > +using CoroutineFn = BaseCoroutine<ValuePromise<T>>; > > + > > +typedef CoroutineFn<void> CoroutineFunc(void *); > > CoroutineFunc looks like a coroutine entry point function. If that's > correct then I suggest naming it CoroutineEntryFunc to avoid confusion > between CoroutineFn vs CoroutineFunc (their names are too similar). > Nevermind, it's a useless dup of CoroutineEntry. > Also, where is CoroutineFunc used? > > > +// The actu promises, respectively for non-void and void types. > > s/actu/actual/? > Yes. Paolo >