spin_lock_irqsave(&serport->lock, flags);
        clear_bit(SERPORT_ACTIVE, &serport->flags);
-       set_bit(SERPORT_DEAD, &serport->flags);
        spin_unlock_irqrestore(&serport->lock, flags);
-
-       wake_up_interruptible(&serport->wait);
 }
 
 /*
 }
 #endif
 
+static int serport_ldisc_hangup(struct tty_struct *tty)
+{
+       struct serport *serport = (struct serport *) tty->disc_data;
+       unsigned long flags;
+
+       spin_lock_irqsave(&serport->lock, flags);
+       set_bit(SERPORT_DEAD, &serport->flags);
+       spin_unlock_irqrestore(&serport->lock, flags);
+
+       wake_up_interruptible(&serport->wait);
+       return 0;
+}
+
 static void serport_ldisc_write_wakeup(struct tty_struct * tty)
 {
        struct serport *serport = (struct serport *) tty->disc_data;
        .compat_ioctl = serport_ldisc_compat_ioctl,
 #endif
        .receive_buf =  serport_ldisc_receive,
+       .hangup =       serport_ldisc_hangup,
        .write_wakeup = serport_ldisc_write_wakeup
 };