svn commit: r230654 - head/usr.bin/tip/tip
Poul-Henning Kamp
phk at FreeBSD.org
Sat Jan 28 20:45:48 UTC 2012
Author: phk
Date: Sat Jan 28 20:45:47 2012
New Revision: 230654
URL: http://svn.freebsd.org/changeset/base/230654
Log:
Make tip exit if the device disappears, for instance when unplugging
or resetting USB serial devices.
Somebody[tm] should rewrite tip(1) to use two thread instead of two
processes or maybe even use that new-fangled "select(2)" or positively
futuristic "poll(2)" system call.
Modified:
head/usr.bin/tip/tip/tip.c
head/usr.bin/tip/tip/tipout.c
Modified: head/usr.bin/tip/tip/tip.c
==============================================================================
--- head/usr.bin/tip/tip/tip.c Sat Jan 28 19:48:44 2012 (r230653)
+++ head/usr.bin/tip/tip/tip.c Sat Jan 28 20:45:47 2012 (r230654)
@@ -584,7 +584,7 @@ parwrite(int fd, char *buf, size_t n)
bp++;
}
if (write(fd, buf, n) < 0) {
- if (errno == EIO)
+ if (errno == EIO || errno == ENXIO)
tipabort("Lost carrier.");
/* this is questionable */
perror("write");
Modified: head/usr.bin/tip/tip/tipout.c
==============================================================================
--- head/usr.bin/tip/tip/tipout.c Sat Jan 28 19:48:44 2012 (r230653)
+++ head/usr.bin/tip/tip/tipout.c Sat Jan 28 20:45:47 2012 (r230654)
@@ -148,11 +148,12 @@ tipout(void)
scnt = read(FD, buf, BUFSIZ);
if (scnt <= 0) {
/* lost carrier */
- if (scnt == 0 || (scnt < 0 && errno == EIO)) {
+ if (scnt == 0 ||
+ (scnt < 0 && (errno == EIO || errno == ENXIO))) {
sigemptyset(&mask);
sigaddset(&mask, SIGTERM);
sigprocmask(SIG_BLOCK, &mask, NULL);
- intTERM(0);
+ intTERM(SIGHUP);
/*NOTREACHED*/
}
continue;
More information about the svn-src-head
mailing list