char: restore read callback on a reattached (hotplug) chardev
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAABAgAGBQJTIYiOAAoJEEy22O7T6HE4hIoQAIxdi4/eZYXUAPFzmY6OUXF0 Nr0b2xKvwX9iUNr7UBwJT/gcAWwNQCFPVCkCrY9ksVlIEHeyYEWApbc9JfHnz8+z Ae/E8bpmFrROnpdb8dhrN7Vzp4o8N0x1U0Hx6tI1uxndSEP0fd0bEoHcjNK9JWGW hSfQOPGK/OKyKV6sSULtaE21s+W5zJopg3Zc/EZiz3HGIDXKdZfbnZsrFtjJ9fus KMsUJd0JgAozGIABB1o2+yiZWl+X0delj63RLoBuYNyEndwiheSDM5sneG+qJIUM x+/T98hGN8NvWdYx2JQTkDOIhYE2btnirkmdv5AENEyC5GgbEC+LE/a1cGLutt14 yr69bHhQMt+slmqWYIJdzKaTjC4MrTgyJAsHT7/8QP/AgaRE6rJ0nyfS49ZL1qKu KUuvbuSk4qmvJBBcXktH0MPYgUkqLoAsTrO4n2ck3+Xfn3MIyJEHm6UKv/qTiPZV YR/fL9/LmCSCvk+W1YtoxOPtOtsTLZmcm1+E1pgJVYhp5gOIMXwZ49arXQvbKnQU veSwCSDyoQ3eh8daXRPcJM7J/7xl083P9BQDvmOMfNypO6dJD4xYJ+2Rsuu1f18m lINYEKQihSRPj78j30dFxDdGUVBy8EjvXzOmyaA6inYVonSvN/hveFqOp1ZDpx40 cqbpKMqZq/cuEWiMpjBg =VVjJ -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/kraxel/tags/pull-chardev-1' into staging char: restore read callback on a reattached (hotplug) chardev # gpg: Signature made Thu 13 Mar 2014 10:29:34 GMT using RSA key ID D3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" * remotes/kraxel/tags/pull-chardev-1: char: restore read callback on a reattached (hotplug) chardev Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
4a9a1f49c5
17
qemu-char.c
17
qemu-char.c
|
@ -213,7 +213,7 @@ void qemu_chr_add_handlers(CharDriverState *s,
|
||||||
s->chr_read = fd_read;
|
s->chr_read = fd_read;
|
||||||
s->chr_event = fd_event;
|
s->chr_event = fd_event;
|
||||||
s->handler_opaque = opaque;
|
s->handler_opaque = opaque;
|
||||||
if (s->chr_update_read_handler)
|
if (fe_open && s->chr_update_read_handler)
|
||||||
s->chr_update_read_handler(s);
|
s->chr_update_read_handler(s);
|
||||||
|
|
||||||
if (!s->explicit_fe_open) {
|
if (!s->explicit_fe_open) {
|
||||||
|
@ -1136,13 +1136,14 @@ static void pty_chr_state(CharDriverState *chr, int connected)
|
||||||
if (!s->connected) {
|
if (!s->connected) {
|
||||||
s->connected = 1;
|
s->connected = 1;
|
||||||
qemu_chr_be_generic_open(chr);
|
qemu_chr_be_generic_open(chr);
|
||||||
|
}
|
||||||
|
if (!chr->fd_in_tag) {
|
||||||
chr->fd_in_tag = io_add_watch_poll(s->fd, pty_chr_read_poll,
|
chr->fd_in_tag = io_add_watch_poll(s->fd, pty_chr_read_poll,
|
||||||
pty_chr_read, chr);
|
pty_chr_read, chr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void pty_chr_close(struct CharDriverState *chr)
|
static void pty_chr_close(struct CharDriverState *chr)
|
||||||
{
|
{
|
||||||
PtyCharDriver *s = chr->opaque;
|
PtyCharDriver *s = chr->opaque;
|
||||||
|
@ -2509,6 +2510,17 @@ static void tcp_chr_connect(void *opaque)
|
||||||
qemu_chr_be_generic_open(chr);
|
qemu_chr_be_generic_open(chr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void tcp_chr_update_read_handler(CharDriverState *chr)
|
||||||
|
{
|
||||||
|
TCPCharDriver *s = chr->opaque;
|
||||||
|
|
||||||
|
remove_fd_in_watch(chr);
|
||||||
|
if (s->chan) {
|
||||||
|
chr->fd_in_tag = io_add_watch_poll(s->chan, tcp_chr_read_poll,
|
||||||
|
tcp_chr_read, chr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#define IACSET(x,a,b,c) x[0] = a; x[1] = b; x[2] = c;
|
#define IACSET(x,a,b,c) x[0] = a; x[1] = b; x[2] = c;
|
||||||
static void tcp_chr_telnet_init(int fd)
|
static void tcp_chr_telnet_init(int fd)
|
||||||
{
|
{
|
||||||
|
@ -2664,6 +2676,7 @@ static CharDriverState *qemu_chr_open_socket_fd(int fd, bool do_nodelay,
|
||||||
chr->get_msgfd = tcp_get_msgfd;
|
chr->get_msgfd = tcp_get_msgfd;
|
||||||
chr->chr_add_client = tcp_chr_add_client;
|
chr->chr_add_client = tcp_chr_add_client;
|
||||||
chr->chr_add_watch = tcp_chr_add_watch;
|
chr->chr_add_watch = tcp_chr_add_watch;
|
||||||
|
chr->chr_update_read_handler = tcp_chr_update_read_handler;
|
||||||
/* be isn't opened until we get a connection */
|
/* be isn't opened until we get a connection */
|
||||||
chr->explicit_be_open = true;
|
chr->explicit_be_open = true;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue