summaryrefslogtreecommitdiffstats
path: root/qemu-char.c
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2016-02-12 16:05:10 +0100
committerTimothy Pearson <tpearson@raptorengineering.com>2019-11-29 19:45:28 -0600
commit1896c3f98b5723fb98e7d0894c9a1fdf203c6fce (patch)
tree0afcad4de6118c608d98d0038636e88fede72a2a /qemu-char.c
parenteed02f36c764e2779b3351aa67a05b9df6b45d06 (diff)
downloadhqemu-1896c3f98b5723fb98e7d0894c9a1fdf203c6fce.zip
hqemu-1896c3f98b5723fb98e7d0894c9a1fdf203c6fce.tar.gz
Revert "qemu-char: Keep pty slave file descriptor open until the master is closed"
This reverts commit 34689e206abddac87a5217d458534e24f2a05562. Marc-André Lureau provided the following commentary: "It looks like if a the slave is opened, then Linux will buffer the master writes, up to a few kb and then throttle, so it's not entirely blocked but eventually the guest VM dies. However, not having any slave open it will simply let the write go and discard the data. At least, virt-install configures a pty for the serial but viewers like virt-manager do not necessarily open it. And, if there are no viewers, it will just hang. If qemu starts reading all the data from the slave, I don't think interactions with other slaves will work. I don't see much options but to close the slave, thus reverting this patch." Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'qemu-char.c')
-rw-r--r--qemu-char.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/qemu-char.c b/qemu-char.c
index 1b7d5da..00caf65 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -1171,7 +1171,6 @@ typedef struct {
int connected;
guint timer_tag;
guint open_tag;
- int slave_fd;
} PtyCharDriver;
static void pty_chr_update_read_handler_locked(CharDriverState *chr);
@@ -1348,7 +1347,6 @@ static void pty_chr_close(struct CharDriverState *chr)
qemu_mutex_lock(&chr->chr_write_lock);
pty_chr_state(chr, 0);
- close(s->slave_fd);
object_unref(OBJECT(s->ioc));
if (s->timer_tag) {
g_source_remove(s->timer_tag);
@@ -1376,6 +1374,7 @@ static CharDriverState *qemu_chr_open_pty(const char *id,
return NULL;
}
+ close(slave_fd);
qemu_set_nonblock(master_fd);
chr = qemu_chr_alloc(common, errp);
@@ -1400,7 +1399,6 @@ static CharDriverState *qemu_chr_open_pty(const char *id,
chr->explicit_be_open = true;
s->ioc = QIO_CHANNEL(qio_channel_file_new_fd(master_fd));
- s->slave_fd = slave_fd;
s->timer_tag = 0;
return chr;
OpenPOWER on IntegriCloud