From mboxrd@z Thu Jan 1 00:00:00 1970 To: 9fans@9fans.net Subject: Re: [9fans] odd out-of-memory behavior From: "Russ Cox" Date: Fri, 25 Jul 2008 15:39:27 -0400 In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Message-Id: <20080725193713.036781E8C1C@holo.morphisms.net> Topicbox-Message-UUID: f1384398-ead3-11e9-9d60-3106f5b1d025 > how would that happen? upas/fs -p doesn't fork. > (it's being run from imap4d.) maybe more than one process isn't involved. that would make your job easier. ☺ > i originally thought someone else might be sitting > on the shared segments, but i couldn't explain how > that might be happening. i also thought the purpose > of this loop was to hunt down relatives sharing memory > with killbig's vic: > > for(p = procalloc.arena; p < ep; p++) { > if(p->state == Dead || p->kp) > continue; > if(p != kp && p->seg[BSEG] && p->seg[BSEG] == kp->seg[BSEG]) > p->procctl = Proc_exitbig; > } > > so much for the "careful" thought. what am i missing? that loop identifies and marks them, but it doesn't kill them. they won't die until the next time they attempt to cross the kernel-user boundary. i also wonder if perhaps there is some way that you can manage to end up sleeping for the pager in fixfault while holding the lock of the big segment. i don't see one immediately, but that doesn't mean it's not there. if you can get acid running, 100 seconds should be plenty of time to get stack traces that would solve this. russ