--- kiss/mkiss.c.orig 2008-12-05 22:01:49.000000000 +0100 +++ kiss/mkiss.c 2008-12-05 22:09:36.000000000 +0100 @@ -96,6 +96,7 @@ { char *name; /* Interface name (/dev/???) */ int fd; /* File descriptor */ + int is_pty; int escaped; /* FESC received? */ u16 crc; /* Incoming frame crc */ unsigned char obuf[SIZE]; /* TX buffer */ @@ -475,6 +476,8 @@ perror("mkiss: open"); return 1; } + grantpt(tty->fd); + tty->is_pty = !unlockpt(tty->fd); tty->name = argv[optind]; tty_raw(tty->fd, hwflag); @@ -502,6 +505,8 @@ perror("mkiss: open"); return 1; } + grantpt(pty[i]->fd); + pty[i]->is_pty = !unlockpt(pty[i]->fd); pty[i]->name = argv[optind + i + 1]; tty_raw(pty[i]->fd, FALSE); pty[i]->optr = pty[i]->obuf; @@ -511,9 +516,11 @@ /* * Now all the ports are open, lock them. */ - tty_lock(argv[optind]); + if (!tty->is_pty) + tty_lock(argv[optind]); for (i = 0; i < numptys; i++) - tty_lock(argv[optind + i + 1]); + if (!pty[i]->is_pty) + tty_lock(argv[optind + i + 1]); signal(SIGHUP, SIG_IGN); signal(SIGUSR1, sigusr1_handler);