Re: Missing in sigaction
Re: Missing in sigaction
- Subject: Re: Missing in sigaction
- From: Tilghman Lesher <email@hidden>
- Date: Wed, 28 Mar 2012 02:15:08 -0500
On Tue, Mar 27, 2012 at 5:50 PM, Nat! <email@hidden> wrote:
> Am 27.03.2012 um 22:22 schrieb Tilghman Lesher:
>> On Tue, Mar 27, 2012 at 1:57 PM, Nat! <email@hidden> wrote:
>>> instead of many words, here's the output of two program runs once with a sleep( 2) - as in seconds, not as in man - commented in and out. What I believe this demonstrates, is that on Darwin (Kernel Version 10.8.0), blocked signal information is lost, which is incovenient. gdb has a similiar problem.
>>>
>>> Or it shows that I am misunderstanding something ;)
>>>
>>> The problem is not that the signal is occurring less often, that's expected, but that the struct __siginfo has trouble remembering things.
>>
>> You really should read the manpage for sigaction, in particular, the
>> section that reads:
>>
>> "In general though, signal handlers should do little more than set a
>> flag; most other actions are not safe."
>>
>> Note, also, that printf() is not in the list of "safe" functions to
>> call. Thus your call to p_log is defined as not safe. While sleep()
>> is safe to call, it also violates one of the cardinal rules of signal
>> handlers -- do only what is necessary to flag that a signal occurred,
>> and do not take more time than is necessary. The actual handling of
>> what the signal represents should be done in a main thread.
>
> Tilghman, do you really think printf will magically erase struct __siginfo.si_pid ahead of printf even being called ?
No, I think you shouldn't be calling sleep(3) inside a signal handler.
Ever. Any time the execution of a signal handler lasts longer than a
single context switch (1/10th of a second), you are asking for
trouble. I also pointed out that your use of printf(3) is indicative
that you haven't understood the sigaction(2) documentation.
> To make you feel better, appended is the same code, without printf, "surprisingly" with the same result.
And if you remove the sleep() call, surprisingly, there's no issue.
-Tilghman
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden