Commit 6bbb6c06 authored by Peter Xu's avatar Peter Xu Committed by Paolo Bonzini
Browse files

chardev: use per-dev context for io_add_watch_poll



It was only passed in by chr_update_read_handlers().  However when
reconnect, we'll lose that context information.  So if a chardev was
running on another context (rather than the default context, the NULL
pointer), it'll switch back to the default context if reconnection
happens.  But, it should really stick to the old context.

Convert all the callers of io_add_watch_poll() to use the internally
cached gcontext.  Then the context should be able to survive even after
reconnections.

Signed-off-by: default avatarPeter Xu <peterx@redhat.com>
Message-Id: <1505975754-21555-4-git-send-email-peterx@redhat.com>
Reviewed-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 95eeeba6
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -94,7 +94,7 @@ static void fd_chr_update_read_handler(Chardev *chr,
        chr->gsource = io_add_watch_poll(chr, s->ioc_in,
                                           fd_chr_read_poll,
                                           fd_chr_read, chr,
                                           context);
                                           chr->gcontext);
    }
}

+1 −1
Original line number Diff line number Diff line
@@ -219,7 +219,7 @@ static void pty_chr_state(Chardev *chr, int connected)
            chr->gsource = io_add_watch_poll(chr, s->ioc,
                                               pty_chr_read_poll,
                                               pty_chr_read,
                                               chr, NULL);
                                               chr, chr->gcontext);
        }
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -516,7 +516,7 @@ static void tcp_chr_connect(void *opaque)
        chr->gsource = io_add_watch_poll(chr, s->ioc,
                                           tcp_chr_read_poll,
                                           tcp_chr_read,
                                           chr, NULL);
                                           chr, chr->gcontext);
    }
    qemu_chr_be_event(chr, CHR_EVENT_OPENED);
}
@@ -535,7 +535,7 @@ static void tcp_chr_update_read_handler(Chardev *chr,
        chr->gsource = io_add_watch_poll(chr, s->ioc,
                                           tcp_chr_read_poll,
                                           tcp_chr_read, chr,
                                           context);
                                           chr->gcontext);
    }
}

+1 −1
Original line number Diff line number Diff line
@@ -110,7 +110,7 @@ static void udp_chr_update_read_handler(Chardev *chr,
        chr->gsource = io_add_watch_poll(chr, s->ioc,
                                           udp_chr_read_poll,
                                           udp_chr_read, chr,
                                           context);
                                           chr->gcontext);
    }
}