One of the conditions checked by ptcpoll() in order to determine if
writing is possible is missing from the equivalent kqueue filter.

Diff below fixes that, ok?

Index: kern/tty_pty.c
===================================================================
RCS file: /cvs/src/sys/kern/tty_pty.c,v
retrieving revision 1.98
diff -u -p -r1.98 tty_pty.c
--- kern/tty_pty.c      7 Apr 2020 13:27:51 -0000       1.98
+++ kern/tty_pty.c      20 May 2020 09:48:04 -0000
@@ -708,7 +708,8 @@ filt_ptcwrite(struct knote *kn, long hin
                if (ISSET(pti->pt_flags, PF_REMOTE)) {
                        if (tp->t_canq.c_cc == 0)
                                kn->kn_data = tp->t_canq.c_cn;
-               } else if (tp->t_rawq.c_cc + tp->t_canq.c_cc < TTYHOG(tp)-2)
+               } else if ((tp->t_rawq.c_cc + tp->t_canq.c_cc < TTYHOG(tp)-2) ||
+                   (tp->t_canq.c_cc == 0 && ISSET(tp->t_lflag, ICANON)))
                        kn->kn_data = tp->t_canq.c_cn -
                            (tp->t_rawq.c_cc + tp->t_canq.c_cc);
        }

Reply via email to