@@ -929,12 +929,28 @@ static void pty_chr_read(void *opaque)
}
}
+static int pty_iohandler(void *opaque, unsigned int mask)
+{
+ int ret;
+
+ ret = 0;
+ switch(mask) {
+ case IOH_MASK_CAN_READ:
+ ret = pty_chr_read_poll(opaque);
+ break;
+ case IOH_MASK_READ:
+ pty_chr_read(opaque);
+ break;
+ }
+ return ret;
+}
+
static void pty_chr_update_read_handler(CharDriverState *chr)
{
PtyCharDriver *s = chr->opaque;
- qemu_set_fd_handler2(s->fd, pty_chr_read_poll,
- pty_chr_read, NULL, chr);
+ assign_iohandler(s->fd, pty_iohandler, IOH_MASK_CAN_READ|IOH_MASK_READ,
+ chr);
s->polling = 1;
/*
* Short timeout here: just need wait long enougth that qemu makes
@@ -952,7 +968,7 @@ static void pty_chr_state(CharDriverState *chr, int connected)
PtyCharDriver *s = chr->opaque;
if (!connected) {
- qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
+ remove_iohandler(s->fd);
s->connected = 0;
s->polling = 0;
/* (re-)connect poll interval for idle guests: once per second.
@@ -988,7 +1004,7 @@ static void pty_chr_close(struct CharDriverState *chr)
{
PtyCharDriver *s = chr->opaque;
- qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
+ remove_iohandler(s->fd);
close(s->fd);
qemu_del_timer(s->timer);
qemu_free_timer(s->timer);
Update the pty code to use the new iohandler api. The change is mostly mechanical with a new iohandler function calling the older functions depending on the value of the 'mask' field. Signed-off-by: Amit Shah <amit.shah@redhat.com> --- qemu-char.c | 24 ++++++++++++++++++++---- 1 files changed, 20 insertions(+), 4 deletions(-)