User Sja <[EMAIL PROTECTED]> wrote:
> I don't really know my way around the kernel so I'm just guessing here:
>
> Is there a proctree lock release operation missing in kern_sig.c,
> function issignal()? There seems to be one lock operation more
> than there are release operations. I tried putting one in and
> now gdb doesn't hang the whole machine (at least as easily as
> before.)
I think you've really found the problem! Your analysis and fix seems to be
correct, and it wouldn't affect "normal" operations, only those when a
process is being traced. I'll test it out right now to make sure it works,
and Paul can commit it if he also thinks it is correct.
> #kern (sja@tilli) 112> cvs diff -u kern_sig.c
> Index: kern_sig.c
> ===================================================================
> RCS file: /usr/cvs/src/sys/kern/kern_sig.c,v
> retrieving revision 1.98
> diff -u -r1.98 kern_sig.c
> --- kern_sig.c 2000/12/23 19:43:09 1.98
> +++ kern_sig.c 2000/12/31 16:01:45
> @@ -1311,6 +1311,7 @@
> PROCTREE_LOCK(PT_SHARED);
> } while (!trace_req(p)
> && p->p_flag & P_TRACED);
> + PROCTREE_LOCK(PT_RELEASE);
>
> /*
> * If the traced bit got turned off, go back up
>
>
> ++sja
--
Brian Fundakowski Feldman \ FreeBSD: The Power to Serve! /
[EMAIL PROTECTED] `------------------------------'
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message