tty: Fix O_NOCTTY handling
authorAlan Cox <alan@linux.intel.com>
Sat, 9 Jan 2016 21:00:32 +0000 (21:00 +0000)
committerAlan Cox <alan@linux.intel.com>
Sat, 9 Jan 2016 21:00:32 +0000 (21:00 +0000)
Finally we get the right process groups in the right places and init does
what we expect

Kernel/include/kernel.h
Kernel/include/tty.h
Kernel/inode.c
Kernel/tty.c

index 20a71ac..4d8d539 100644 (file)
@@ -776,7 +776,7 @@ extern void readi(inoptr ino, uint8_t flag);
 extern void writei(inoptr ino, uint8_t flag);
 extern int16_t doclose (uint8_t uindex);
 extern inoptr rwsetup (bool is_read, uint8_t *flag);
-extern int dev_openi(inoptr *ino, uint8_t flag);
+extern int dev_openi(inoptr *ino, uint16_t flag);
 extern void sync(void);
 
 /* mm.c */
index 249a924..c7e3168 100644 (file)
@@ -198,7 +198,7 @@ extern int tty_close(uint8_t minor);
 extern int tty_ioctl(uint8_t minor, uarg_t request, char *data);
 
 extern void tty_exit(void);
-extern void tty_post(inoptr ino, uint8_t minor, uint8_t flag);
+extern void tty_post(inoptr ino, uint8_t minor, uint16_t flag);
 
 extern void tty_hangup(uint8_t minor);
 extern void tty_carrier_drop(uint8_t minor);
index d7b13d6..efc22ff 100644 (file)
@@ -299,7 +299,7 @@ inoptr rwsetup(bool is_read, uint8_t * flag)
  *
  *     FIXME. Need so IS_TTY(dev) defines too and minor(x) etc
  */
-int dev_openi(inoptr *ino, uint8_t flag)
+int dev_openi(inoptr *ino, uint16_t flag)
 {
         int ret;
         uint16_t da = (*ino)->c_node.i_addr[0];
index f3822ee..4e9996e 100644 (file)
@@ -165,7 +165,7 @@ int tty_open(uint8_t minor, uint16_t flag)
 }
 
 /* Post processing for a successful tty open */
-void tty_post(inoptr ino, uint8_t minor, uint8_t flag)
+void tty_post(inoptr ino, uint8_t minor, uint16_t flag)
 {
         struct tty *t = &ttydata[minor];
         irqflags_t irq = di();
@@ -177,6 +177,10 @@ void tty_post(inoptr ino, uint8_t minor, uint8_t flag)
                udata.u_ptab->p_tty = minor;
                udata.u_ctty = ino;
                t->pgrp = udata.u_ptab->p_pgrp;
+#ifdef DEBUG
+               kprintf("setting tty %d pgrp to %d for pid %d\n",
+                       minor, t->pgrp, udata.u_ptab->p_pid);
+#endif
        }
        irqrestore(irq);
 }
@@ -190,10 +194,16 @@ int tty_close(uint8_t minor)
        if (minor == udata.u_ptab->p_tty) {
                udata.u_ptab->p_tty = 0;
                udata.u_ctty = NULL;
+#ifdef DEBUG
+               kprintf("pid %d loses controller\n", udata.u_ptab->p_pid);
+#endif
         }
        t->pgrp = 0;
         /* If we were hung up then the last opener has gone away */
         t->flag &= ~TTYF_DEAD;
+#ifdef DEBUG
+        kprintf("tty %d last close\n", minor);
+#endif
        return (0);
 }