> 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