From f0264abf2684f96c011ad56b292378a67074c148 Mon Sep 17 00:00:00 2001 From: rsc Date: Thu, 20 Jan 2005 22:59:50 +0000 Subject: ignore host read eof while exiting --- src/cmd/samterm/mesg.c | 3 +++ src/cmd/samterm/plan9.c | 5 +++++ src/cmd/samterm/samterm.h | 1 + 3 files changed, 9 insertions(+) (limited to 'src/cmd/samterm') diff --git a/src/cmd/samterm/mesg.c b/src/cmd/samterm/mesg.c index c7371812..09b492a6 100644 --- a/src/cmd/samterm/mesg.c +++ b/src/cmd/samterm/mesg.c @@ -17,6 +17,7 @@ uchar outdata[DATASIZE]; short outcount; int hversion; int hostfd[2]; +int exiting; void inmesg(Hmesg, int); int inshort(int); @@ -29,6 +30,7 @@ void hplumb(int); void clrlock(void); int snarfswap(char*, int, char**); + void rcv(void) { @@ -298,6 +300,7 @@ inmesg(Hmesg type, int count) break; case Hexit: + exiting = 1; outT0(Texit); threadexitsall(nil); break; diff --git a/src/cmd/samterm/plan9.c b/src/cmd/samterm/plan9.c index 5f5c33d0..3d2df85d 100644 --- a/src/cmd/samterm/plan9.c +++ b/src/cmd/samterm/plan9.c @@ -279,6 +279,11 @@ hostproc(void *arg) n = read(hostfd[0], hostbuf[i].data, sizeof hostbuf[i].data); if(0) fprint(2, "hostproc %d\n", n); if(n <= 0){ + if(n == 0){ + if(exiting) + threadexits(nil); + werrstr("unexpected eof"); + } fprint(2, "samterm: host read error: %r\n"); threadexitsall("host"); } diff --git a/src/cmd/samterm/samterm.h b/src/cmd/samterm/samterm.h index 68e2dbb6..dfe2f345 100644 --- a/src/cmd/samterm/samterm.h +++ b/src/cmd/samterm/samterm.h @@ -87,6 +87,7 @@ extern Channel *hostc; extern int hversion; extern int plumbfd; extern int hostfd[2]; +extern int exiting; #define gettext sam_gettext /* stupid gcc built-in functions */ Rune *gettext(Flayer*, long, ulong*); -- cgit v1.2.3