TTY: move pgrp killing
[linux-2.6-block.git] / drivers / tty / tty_io.c
index 05085beb83dbe31b49679735530fa4a5a42b8882..391cec3ce638804fb2fb254ce18775c7a9d97840 100644 (file)
@@ -790,19 +790,24 @@ static void session_clear_tty(struct pid *session)
 void disassociate_ctty(int on_exit)
 {
        struct tty_struct *tty;
-       struct pid *tty_pgrp = NULL;
 
        if (!current->signal->leader)
                return;
 
        tty = get_current_tty();
        if (tty) {
-               tty_pgrp = get_pid(tty->pgrp);
+               struct pid *tty_pgrp = get_pid(tty->pgrp);
                if (on_exit) {
                        if (tty->driver->type != TTY_DRIVER_TYPE_PTY)
                                tty_vhangup(tty);
                }
                tty_kref_put(tty);
+               if (tty_pgrp) {
+                       kill_pgrp(tty_pgrp, SIGHUP, on_exit);
+                       if (!on_exit)
+                               kill_pgrp(tty_pgrp, SIGCONT, on_exit);
+                       put_pid(tty_pgrp);
+               }
        } else if (on_exit) {
                struct pid *old_pgrp;
                spin_lock_irq(&current->sighand->siglock);
@@ -816,12 +821,6 @@ void disassociate_ctty(int on_exit)
                }
                return;
        }
-       if (tty_pgrp) {
-               kill_pgrp(tty_pgrp, SIGHUP, on_exit);
-               if (!on_exit)
-                       kill_pgrp(tty_pgrp, SIGCONT, on_exit);
-               put_pid(tty_pgrp);
-       }
 
        spin_lock_irq(&current->sighand->siglock);
        put_pid(current->signal->tty_old_pgrp);