On 08/11/2017 02:41 PM, Eric Blake wrote: >> Hmm, was it correct even before your patch? Is it safe to enter a coroutine >> (which we've scheduled by nbd_recv_coroutines_enter_all()), which is >> actually >> yielded inside nbd_rwv (not our yield in nbd_co_receive_reply)? > > I'm honestly not sure how to answer the question. In my testing, I was > unable to catch a coroutine yielding inside of nbd_rwv();
Single stepping through nbd_rwv(), I see that I/O is performed by sendmsg(), which either gets the message sent or, because of nonblocking mode, fails with EAGAIN, which gets turned into QIO_CHANNEL_ERR_BLOCK and indeed a call to qemu_channel_yield() within nbd_rwv() - but it's timing sensitive, so I still haven't been able to provoke this scenario using gdb. -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org
signature.asc
Description: OpenPGP digital signature