[M3devel] chosing SIG_SUSPEND?

Jay jay.krell at cornell.edu
Wed Jan 21 14:37:53 CET 2009


 Solaris at least currently has SIGRTMAX. 
 I want to switch RTSignalC.c to "something" here. 
 I can preserve compat, like 
 
 #ifdef __sun 
 SIGUSR2 
 #else..  
 
 or..? 
 
I could do
#ifdef SIGUSR2
#define SIG_SUSPEND SIGUSR2
#elif defined(SIGRTMAX)
#define SIG_SUSPEND SIGRTMAX
#else
#error
#endif
 
I'll go with a compatible version for now and you can change it if you want.
I'll test on Linux/x86, FreeBSD (AMD64, but hopefully there is gcc -m32),
Linux/PPC, Solaris, Cygwin, Darwin/PPC (uh, actually, no, Darwin isn't
really relevant, but I'll make sure the result does what is intended.)
 
It looks like SIGRTMAX is a function call on Solaris.
 
This stuff is like broken, right?
I mean, there's a small number of signals and there's no arbitration.
People just take them over and hope nobody else cares.
 
 
There's no way to just queue a function call to a thread, in portable/general?
Windows has QueueUserAPC or SuspendThread (SuspendThread is dangerous,
thread could be doing anything), QueueUserAPC only interrupts at certain times.
 
 
 - Jay


----------------------------------------
> From: hosking at cs.purdue.edu
> To: jay.krell at cornell.edu
> Date: Wed, 21 Jan 2009 03:42:01 +1100
> CC: m3devel at elegosoft.com
> Subject: Re: [M3devel] chosing SIG_SUSPEND?
>
> Choose SIGRTMAX first if defined, then SIGUSR2. I don't thing NSIG-1
> is reliable, but just works on some systems.
>
> On 21 Jan 2009, at 01:12, Jay wrote:
>
>>
>> What is the algorithm for chosing SIG_SUSPEND?
>>
>> Something like:
>>
>> #include
>>
>> #ifdef __APPLE__
>> /* nothing -- SIG_SUSPEND not used */
>> #elif defined(NSIG)
>> #define SIG_SUSPEND (NSIG - 1)
>> #elif defined(_NSIG)
>> #define SIG_SUSPEND (_NSIG - 1)
>> #elif defined(SIGRTMAX)
>> #define SIG_SUSPEND SIGRTMAX
>> #else
>> #define SIG_SUSPEND SIGUSR2
>> #endif
>>
>> ?
>>
>> Whatever it is, I think it should be in RTSignalC.c.
>>
>> - Jay
>


More information about the M3devel mailing list