Author: kib
Date: Sun Feb 14 18:57:40 2016
New Revision: 295615
URL: https://svnweb.freebsd.org/changeset/base/295615

Log:
  MFC r294598:
  In tty_dealloc(), clear the queues.
  
  Approved by:  re (marius)

Modified:
  stable/10/sys/kern/tty.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/kern/tty.c
==============================================================================
--- stable/10/sys/kern/tty.c    Sun Feb 14 18:17:58 2016        (r295614)
+++ stable/10/sys/kern/tty.c    Sun Feb 14 18:57:40 2016        (r295615)
@@ -215,7 +215,7 @@ ttydev_leave(struct tty *tp)
 
        ttydisc_close(tp);
 
-       /* Destroy associated buffers already. */
+       /* Free i/o queues now since they might be large. */
        ttyinq_free(&tp->t_inq);
        tp->t_inlow = 0;
        ttyoutq_free(&tp->t_outq);
@@ -1052,10 +1052,15 @@ tty_dealloc(void *arg)
 {
        struct tty *tp = arg;
 
-       /* Make sure we haven't leaked buffers. */
-       MPASS(ttyinq_getsize(&tp->t_inq) == 0);
-       MPASS(ttyoutq_getsize(&tp->t_outq) == 0);
-
+       /*
+        * ttyydev_leave() usually frees the i/o queues earlier, but it is
+        * not always called between queue allocation and here.  The queues
+        * may be allocated by ioctls on a pty control device without the
+        * corresponding pty slave device ever being open, or after it is
+        * closed.
+        */
+       ttyinq_free(&tp->t_inq);
+       ttyoutq_free(&tp->t_outq);
        seldrain(&tp->t_inpoll);
        seldrain(&tp->t_outpoll);
        knlist_destroy(&tp->t_inpoll.si_note);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to