Re: [Qemu-devel] [PATCH] Keep pty slave file descriptor open until the master is closed

2016-01-11 Thread Ashley Jonathan
Apologies; I overlooked that detail:

Signed-off-by: Ashley Jonathan 

Regards,
--
Jon Ashley

-Original Message-
From: Paolo Bonzini [mailto:paolo.bonz...@gmail.com] On Behalf Of Paolo Bonzini
Sent: 11 January 2016 09:16
To: Ashley Jonathan; qemu-devel@nongnu.org
Cc: qemu-triv...@nongnu.org
Subject: Re: [PATCH] Keep pty slave file descriptor open until the master is 
closed



On 11/12/2015 12:29, Ashley Jonathan wrote:
> I have experienced a minor difficulty using QEMU with the "-serial 
> pty" option:
> 
> If a process opens the slave pts device, writes data to it, then 
> immediately closes it, the data doesn't reliably get delivered to the 
> emulated serial port. This seems to be because a read of the master 
> pty device returns EIO on Linux if no process has the pts device open, 
> even when data is waiting "in the pipe".
> 
> A fix seems to be for QEMU to keep the pts file descriptor open until 
> the pty is closed, as per the below patch.

You need to include a "Signed-off-by: Ashley Jonathan 
"
line in the commit message, meaning that you have read and understood the 
"Developer Certificate of Origin":

http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/SubmittingPatches?id=f6f94e2ab1b33f0082ac22d71f66385a60d8157f#n297

Just reply to this message with the above line.

Paolo



[Qemu-devel] [PATCH] Keep pty slave file descriptor open until the master is closed

2015-12-11 Thread Ashley Jonathan
I have experienced a minor difficulty using QEMU with the "-serial pty" option:

If a process opens the slave pts device, writes data to it, then immediately 
closes it, the data doesn't reliably get delivered to the emulated serial port. 
This seems to be because a read of the master pty device returns EIO on Linux 
if no process has the pts device open, even when data is waiting "in the pipe".

A fix seems to be for QEMU to keep the pts file descriptor open until the pty 
is closed, as per the below patch.

---
 qemu-char.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/qemu-char.c b/qemu-char.c
index 2969c44..ed03ba0 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -1198,6 +1198,7 @@ typedef struct {
 int connected;
 guint timer_tag;
 guint open_tag;
+int slave_fd;
 } PtyCharDriver;
 
 static void pty_chr_update_read_handler_locked(CharDriverState *chr);
@@ -1373,6 +1374,7 @@ static void pty_chr_close(struct CharDriverState *chr)
 
 qemu_mutex_lock(&chr->chr_write_lock);
 pty_chr_state(chr, 0);
+close(s->slave_fd);
 fd = g_io_channel_unix_get_fd(s->fd);
 g_io_channel_unref(s->fd);
 close(fd);
@@ -1401,7 +1403,6 @@ static CharDriverState *qemu_chr_open_pty(const char *id,
 return NULL;
 }
 
-close(slave_fd);
 qemu_set_nonblock(master_fd);
 
 chr = qemu_chr_alloc();
@@ -1422,6 +1423,7 @@ static CharDriverState *qemu_chr_open_pty(const char *id,
 chr->explicit_be_open = true;
 
 s->fd = io_channel_from_fd(master_fd);
+s->slave_fd = slave_fd;
 s->timer_tag = 0;
 
 return chr;
-- 
2.1.4



---
Jonathan Ashley 
jonathan.ashley AT altran.com