On Tue, Dec 18, 2007 at 05:03:59PM +0000, Samuel Thibault wrote:
> Oops, there may be a problem with this:
>
> John Levon, le Tue 18 Dec 2007 01:41:44 +0000, a écrit :
> > @@ -684,7 +720,9 @@ static void handle_tty_read(struct domai
> > len = sizeof(msg);
> >
> > len = read(dom->tty_fd, msg, len);
> > - if (len < 1) {
> > + if (len == 0) {
> > + /* slave did a close: that's fine. */
> > + } else if (len < 0) {
> > close(dom->tty_fd);
> > dom->tty_fd = -1;
> >
>
> If the slave did a close, you have to somehow remove the fd from the
> select, because else you'll loop trying to read EOF.
Not on Solaris:
$ ./pty
terminal is /dev/pts/35
select returned
got 0 read: slave was closed
<waits>
See attached pty.c. On Linux I get:
$ ./pty
terminal is /dev/pts/9
select returned
read of master: -1 5
select returned
read of master: -1 5
select returned
...
It looks like we must keep the slave fd open on both platforms instead,
as Linux's behaviour if we close the slave is unusable. Do you agree?
regards
john
pty.c
Description: Text document
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|