From owner-freebsd-stable Thu Mar 23 16:54: 1 2000 Delivered-To: freebsd-stable@freebsd.org Received: from apollo.backplane.com (apollo.backplane.com [216.240.41.2]) by hub.freebsd.org (Postfix) with ESMTP id 9A03F37BB0B; Thu, 23 Mar 2000 16:53:54 -0800 (PST) (envelope-from dillon@apollo.backplane.com) Received: (from dillon@localhost) by apollo.backplane.com (8.9.3/8.9.1) id QAA06073; Thu, 23 Mar 2000 16:53:53 -0800 (PST) (envelope-from dillon) Date: Thu, 23 Mar 2000 16:53:53 -0800 (PST) From: Matthew Dillon Message-Id: <200003240053.QAA06073@apollo.backplane.com> To: Matthew Dillon Cc: Ben Smithurst , hackers@FreeBSD.ORG, stable@FreeBSD.ORG Subject: Re: repeatable lockup (pipe related?) References: <20000323222149.C87103@strontium.scientia.demon.co.uk> <200003232244.OAA05041@apollo.backplane.com> Sender: owner-freebsd-stable@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG :: .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 To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message