Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 19 May 2004 08:13:38 -0400
From:      John Baldwin <jhb@FreeBSD.org>
To:        thierry@herbelot.com
Cc:        current ML <current@FreeBSD.org>
Subject:   Re: [long] panic on a recent current
Message-ID:  <200405190813.23919.jhb@FreeBSD.org>
In-Reply-To: <200405182105.04275.thierry@herbelot.com>
References:  <200405182105.04275.thierry@herbelot.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tuesday 18 May 2004 03:05 pm, Thierry Herbelot wrote:
> on a recent -current, running KDE and simultaneously building the world.
>
> As the machine is quite slow, I post this message "raw" (further in the
> message : a gdb session and the full dmesg)
> I'm trying to reproduce the panic.
> The kernel config file is the straight "GENERIC".

Here is a possible fix:

Index: kern_sig.c
===================================================================
RCS file: /usr/cvs/src/sys/kern/kern_sig.c,v
retrieving revision 1.276
diff -u -r1.276 kern_sig.c
--- kern_sig.c  12 Apr 2004 15:56:05 -0000      1.276
+++ kern_sig.c  19 May 2004 12:10:47 -0000
@@ -1953,7 +1953,7 @@
                        td->td_priority = PUSER;
                }
        }
-       if (TD_IS_SLEEPING(td)) {
+       if (TD_ON_SLEEPQ(td)) {
                /*
                 * If thread is sleeping uninterruptibly
                 * we can't interrupt the sleep... the signal will

All the other callers check TD_ON_SLEEPQ() rather than TD_IS_SLEEPING() before 
calling sleepq_abort().  A thread can be marked sleeping w/o being on a sleep 
queue during the timed sleepq race workaround.  Also, for what it's worth, 
4.x's psignal() doesn't do an unsleep() in the case that this code does.

-- 
John Baldwin <jhb@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200405190813.23919.jhb>