getty: add O_NONBLOCK to open which is used to drop ctty
authorDenys Vlasenko <vda.linux@googlemail.com>
Sat, 22 Oct 2011 06:19:42 +0000 (08:19 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sat, 22 Oct 2011 06:19:42 +0000 (08:19 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
loginutils/getty.c

index 23084600883a79cea2eda454ba6f86d9c7d40eec..3496f0284c3a466f38618b91cb273641404f7b07 100644 (file)
@@ -556,10 +556,12 @@ int getty_main(int argc UNUSED_PARAM, char **argv)
                 * In this case (setsid failed) we may still have ctty,
                 * and it may be different from tty we need to control!
                 * If we still have ctty, on Linux ioctl(TIOCSCTTY)
-                * (which we are going to call a bit later) always fails.
-                * Try to drop ctty now to prevent that.
+                * (which we are going to use a bit later) always fails -
+                * even if we try to take ctty which is already ours!
+                * Try to drop old ctty now to prevent that.
+                * Use O_NONBLOCK: old ctty may be a serial line.
                 */
-               fd = open("/dev/tty", O_RDWR);
+               fd = open("/dev/tty", O_RDWR | O_NONBLOCK);
                if (fd >= 0) {
                        ioctl(fd, TIOCNOTTY);
                        close(fd);