On Thu, Aug 08, 2013 at 02:29:39AM +0100, Charlie Shepherd wrote:
On 07/08/2013 23:13, Gabriel Kerneis wrote:
On Wed, Aug 07, 2013 at 09:18:05PM +0200, Stefan Hajnoczi wrote:
I guess the practical problem is that CPC will get
upset that it's being called by the coroutine implementation from
non-coroutine contexts.
But is it really the case? If Charlie added an annotation, it probably means
that in practice it was only called from coroutine context anyway.
It was also called from coroutine implementation in functions that
weren't annotated coroutine_fn (qemu_coroutine_switch() and
friends).
In that case, the interface/implementation split suggested by Stefan makes
sense.
Note that qemu_coroutine_self() in principle really needs to be annotated
coroutine_fn since it accesses (and returns) its execution context. The fact
that it is implemented with thread-local variables in Qemu is an implementation
detail, almost a hack (however smart); the "natural" CPC way would be to just
return the coroutine associated with the current continuation. So keeping the
annotation definitely makes sense.