mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 02:24:58 -06:00
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>
This commit is contained in:
parent
5ad81b4946
commit
6886ceaf61
2 changed files with 16 additions and 3 deletions
10
io/channel.c
10
io/channel.c
|
@ -469,6 +469,16 @@ void coroutine_fn qio_channel_yield(QIOChannel *ioc,
|
|||
}
|
||||
qio_channel_set_aio_fd_handlers(ioc);
|
||||
qemu_coroutine_yield();
|
||||
|
||||
/* Allow interrupting the operation by reentering the coroutine other than
|
||||
* through the aio_fd_handlers. */
|
||||
if (condition == G_IO_IN && ioc->read_coroutine) {
|
||||
ioc->read_coroutine = NULL;
|
||||
qio_channel_set_aio_fd_handlers(ioc);
|
||||
} else if (condition == G_IO_OUT && ioc->write_coroutine) {
|
||||
ioc->write_coroutine = NULL;
|
||||
qio_channel_set_aio_fd_handlers(ioc);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue