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;
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to