From owner-freebsd-current Sun Jan 9 23:36:37 2000 Delivered-To: freebsd-current@freebsd.org Received: from ren.detir.qld.gov.au (ns.detir.qld.gov.au [203.46.81.66]) by hub.freebsd.org (Postfix) with ESMTP id 2DDD115044 for ; Sun, 9 Jan 2000 23:36:33 -0800 (PST) (envelope-from syssgm@detir.qld.gov.au) Received: by ren.detir.qld.gov.au; id RAA09825; Mon, 10 Jan 2000 17:36:05 +1000 (EST) Received: from ogre.detir.qld.gov.au(167.123.8.3) via SMTP by ren.detir.qld.gov.au, id smtpd009813; Mon Jan 10 17:36:00 2000 Received: from atlas.detir.qld.gov.au (atlas.detir.qld.gov.au [167.123.8.9]) by ogre.detir.qld.gov.au (8.8.8/8.8.7) with ESMTP id RAA29556 for ; Mon, 10 Jan 2000 17:35:35 +1000 (EST) Received: from nymph.detir.qld.gov.au (nymph.detir.qld.gov.au [167.123.10.10]) by atlas.detir.qld.gov.au (8.8.5/8.8.5) with ESMTP id RAA26615 for ; Mon, 10 Jan 2000 17:35:35 +1000 (EST) Received: from nymph.detir.qld.gov.au (localhost [127.0.0.1]) by nymph.detir.qld.gov.au (8.9.3/8.8.7) with ESMTP id RAA51943; Mon, 10 Jan 2000 17:35:34 +1000 (EST) (envelope-from syssgm@nymph.detir.qld.gov.au) Message-Id: <200001100735.RAA51943@nymph.detir.qld.gov.au> To: freebsd-current@freebsd.org Cc: syssgm@detir.qld.gov.au Subject: Crash from ^T during heavy paging Date: Mon, 10 Jan 2000 17:35:34 +1000 From: Stephen McKay Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG I'm currently giving 4.0 a thrashing in the best way I know. I run way too much stuff and let it page madly all day. Here's how I killed it: 1) pick a 32MB box 2) make -j20 buildworld 3) lean on ^T and let autorepeat go for it Soon it dies in calcru() called from ttyinfo(). The stack trace showed that I caught it part way through a fork(). In calcru(), p->p_stats has a bad value because it is initialised in vm_fork() sometime *after* the P_INMEM flag is set, and there are some M_WAITOK mallocs between them. The problem is that calcru() thinks that P_INMEM means that the proc structure is fully and accurately populated. But P_INMEM is one of the first flags set. A few places test for p->p_stats == NULL but that doesn't look applicable since p->p_stats is uninitialised in this case. Hmm. I can't see any use for that test at first glance. So, calcru() and possibly some other places, are looking at a struct proc before it's all there. What's the "proper" way to do it? Stephen. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message