summaryrefslogtreecommitdiffstats
path: root/include/io
diff options
context:
space:
mode:
authorKevin Wolf2019-02-18 14:09:32 +0100
committerKevin Wolf2019-02-25 15:03:19 +0100
commit6886ceaf61c2399419258246a064485e9b1e51ac (patch)
tree81609e35fb15b3b34e4edd2aef68e243ff32ca70 /include/io
parentnbd: Restrict connection_co reentrance (diff)
downloadqemu-6886ceaf61c2399419258246a064485e9b1e51ac.tar.gz
qemu-6886ceaf61c2399419258246a064485e9b1e51ac.tar.xz
qemu-6886ceaf61c2399419258246a064485e9b1e51ac.zip
io: Make qio_channel_yield() interruptible
Similar to how qemu_co_sleep_ns() allows preemption from an external coroutine entry, allow reentering qio_channel_yield() early. Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'include/io')
-rw-r--r--include/io/channel.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/include/io/channel.h b/include/io/channel.h
index da2f138200..59460cb1ec 100644
--- a/include/io/channel.h
+++ b/include/io/channel.h
@@ -739,10 +739,13 @@ void qio_channel_detach_aio_context(QIOChannel *ioc);
* addition, no two coroutine can be waiting on the same condition
* and channel at the same time.
*
- * This must only be called from coroutine context
+ * This must only be called from coroutine context. It is safe to
+ * reenter the coroutine externally while it is waiting; in this
+ * case the function will return even if @condition is not yet
+ * available.
*/
-void qio_channel_yield(QIOChannel *ioc,
- GIOCondition condition);
+void coroutine_fn qio_channel_yield(QIOChannel *ioc,
+ GIOCondition condition);
/**
* qio_channel_wait: