cvs commit: src/sys/kern kern_sig.c
John Baldwin
jhb at FreeBSD.org
Thu Mar 3 13:11:03 GMT 2005
On Mar 2, 2005, at 5:55 PM, David Xu wrote:
> John Baldwin wrote:
>
>> On Wednesday 02 March 2005 08:43 am, David Xu wrote:
>>
>>> davidxu 2005-03-02 13:43:51 UTC
>>>
>>> FreeBSD src repository
>>>
>>> Modified files:
>>> sys/kern kern_sig.c
>>> Log:
>>> In kern_sigtimedwait, remove waitset bits for td_sigmask before
>>> sleeping, so in do_tdsignal, we no longer need to test td_waitset.
>>> now td_waitset is only used to give a thread higher priority when
>>> delivering signal to multithreads process.
>>> This also fixes a bug:
>>> when a thread in sigwait states was suspended and later resumed
>>> by SIGCONT, it can no longer receive signals belong to waitset.
>>>
>>
>> Is this related at all to Peter Holm's panic where sigwait() +
>> swapping invokes a panic?
>>
>>
> No. Peter Holm's found is a swapping problem. vm swaps out sleeping
> thread's stack under memory stressing case. but I think that's not
> safe,
> that means, following code can not be used in kernel:
>
> int *p;
>
> func()
> {
> int n;
>
> n = 0;
> p = &n;
> msleep(p);
> /* check variable n ...
> }
>
> func2()
> {
> *p = 2;
> wakeup(p);
> }
>
> unless million lines of kernel code are reviewed, I don't think the
> vm code is safe. The following patch should avoid the problem:
Note that swapping out the stack is the default behavior in 4.x, so
I actually think that the million lines of kernel code are indeed
safe, only sigwait() is broken and should be fixed. :)
--
John Baldwin <jhb at FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve" = http://www.FreeBSD.org
More information about the cvs-src
mailing list