Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> writes: > 24.04.2021 08:23, Markus Armbruster wrote: >> Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> writes: >> >>> If we have current monitor, let's bind it to wrapper coroutine too. >>> >>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> >>> --- >>> block/block-gen.h | 10 ++++++++++ >>> 1 file changed, 10 insertions(+) >>> >>> diff --git a/block/block-gen.h b/block/block-gen.h >>> index c1fd3f40de..61f055a8cc 100644 >>> --- a/block/block-gen.h >>> +++ b/block/block-gen.h >>> @@ -27,6 +27,7 @@ >>> #define BLOCK_BLOCK_GEN_H >>> >>> #include "block/block_int.h" >>> +#include "monitor/monitor.h" >>> >>> /* Base structure for argument packing structures */ >>> typedef struct AioPollCo { >>> @@ -38,11 +39,20 @@ typedef struct AioPollCo { >>> >>> static inline int aio_poll_co(AioPollCo *s) >>> { >>> + Monitor *mon = monitor_cur(); >> >> This gets the currently executing coroutine's monitor from the hash >> table. >> >>> assert(!qemu_in_coroutine()); >>> >>> + if (mon) { >>> + monitor_set_cur(s->co, mon); >> >> This writes it back. No-op, since the coroutine hasn't changed. Why? > > No. s->co != qemu_corotuine_current(), so it's not a write back, but creating > a new entry in the hash map. s->co is a new coroutine which we are going to > start.
Ah, that's what I missed. Thanks! [...]