::      .SH foo, bar, baz
::
::and then a lot of junk text (I appended /etc/rc and /etc/rc.network). Then,
::when I do
::
::      nroff -ms foo.ms 2>&1 | less
::
::and quit 'less' straight away, the whole system seems to lockup.  ^T
::worked (sometimes), and showed troff using lots of system time (no user
::time). ping from another host worked, ctrl-alt-esc dropped into DDB ok,

    I've committed a fix to this in -current, 4.x, and 3.x.  Rev 1.61
    kern/sys_pipe.c (current), 1.60.2.1 in RELENG_4, something else in
    RELENG_3.  Sorry 2.2.x'rs, three is my limit :-)

    What happens is that the pipe writer checks for the reader going away
    before entering the while() loop on the write, but only checks 
    sporatically inside that loop.

    There are situations where the reader may go away while the writer is
    blocked and cause the writer to enter into an infinite loop because
    the writer believes there is a reader 'reading' when, in fact, the reader
    side is stuck in pipeclose().  They two sides then play ping-pong 
    tsleep/wakeup with each other forever.

                                        -Matt
                                        Matthew Dillon 
                                        <[EMAIL PROTECTED]>



To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to