Skip to contentSkip to conversation

question about signal handling in tst_sig()

LTP Han Pingtian 2 participants 4 messages Mar 14, 2016 – Mar 15, 2016

lore
Share & tools
lore
#0 lore raw

Hi there,

Looks like in tst_sig(), if _SC_SIGRT_MIN defined, all realtime signals won't be set an handler:

125 #ifdef _SC_SIGRT_MIN
126 if (sig >= sigrtmin && sig <= sigrtmax)
127 continue;
128 #endif

but, if it wasn't defined, then all realtime signals will be set an handler:

134 #if !defined(_SC_SIGRT_MIN) && defined(__SIGRTMIN) && defined(__SIGRTMAX)
135 /* Ignore all real-time signals */
136 case __SIGRTMIN:
137 case __SIGRTMIN + 1:
...

is that correct, or I missed something here?

Thanks in advance!

#1 lore raw

Hi!

Quoted 11 lines

Looks like in tst_sig(), if _SC_SIGRT_MIN defined, all realtime signals won't be set an handler:

125 #ifdef _SC_SIGRT_MIN
126 if (sig >= sigrtmin && sig <= sigrtmax)
127 continue;
128 #endif

but, if it wasn't defined, then all realtime signals will be set an handler:

Quoted 8 lines

134 #if !defined(_SC_SIGRT_MIN) && defined(__SIGRTMIN) && defined(__SIGRTMAX)
135 /* Ignore all real-time signals */
136 case __SIGRTMIN:
137 case __SIGRTMIN + 1:
...

is that correct, or I missed something here?

The loop goes over signal numbers from 1 to NSIG (which is defined in system headers). Supposedly when _SC_SIGRT_MIN is not defined the system does not support realtime signals and the NSIG has value of the highest allocated (non-realtime) signal number.

Signature · 2 lines
Cyril Hrubis
[email protected]
#2 lore raw

Hi!

Quoted 11 lines
Quoted 11 lines

Looks like in tst_sig(), if _SC_SIGRT_MIN defined, all realtime signals won't be set an handler:

125 #ifdef _SC_SIGRT_MIN
126 if (sig >= sigrtmin && sig <= sigrtmax)
127 continue;
128 #endif

but, if it wasn't defined, then all realtime signals will be set an handler:

Quoted 6 lines
Quoted 6 lines

134 #if !defined(_SC_SIGRT_MIN) && defined(__SIGRTMIN) && defined(__SIGRTMAX)
135 /* Ignore all real-time signals */
136 case __SIGRTMIN:
137 case __SIGRTMIN + 1:
...

And also there is a break down after the long list of cases.

So it looks like:

* if _SC_SIGRT_MIN is defined we have a POSIX compilant system and we skip realtime signals in the if at line 125.

* Otherwise if system is not POSIX compilant but __SIGRTMIN and __SIGRTMAX is defined, we skip them in the hack in the switch()

this is possibly workaround for old glibc without _SC_SIGRT_MIN support

Quoted 13 lines
Quoted 1 line

is that correct, or I missed something here?

The loop goes over signal numbers from 1 to NSIG (which is defined in system headers). Supposedly when _SC_SIGRT_MIN is not defined the system does not support realtime signals and the NSIG has value of the highest allocated (non-realtime) signal number.

Signature · 5 lines
Cyril Hrubis
[email protected]

-- 
Mailing list info: http://lists.linux.it/listinfo/ltp
Signature · 2 lines
Cyril Hrubis
[email protected]
#3 lore raw
Quoted 22 lines · Cyril Hrubis

Hi!

Quoted 11 lines
Quoted 11 lines

Looks like in tst_sig(), if _SC_SIGRT_MIN defined, all realtime signals won't be set an handler:

125 #ifdef _SC_SIGRT_MIN
126 if (sig >= sigrtmin && sig <= sigrtmax)
127 continue;
128 #endif

but, if it wasn't defined, then all realtime signals will be set an handler:

Quoted 6 lines
Quoted 6 lines

134 #if !defined(_SC_SIGRT_MIN) && defined(__SIGRTMIN) && defined(__SIGRTMAX)
135 /* Ignore all real-time signals */
136 case __SIGRTMIN:
137 case __SIGRTMIN + 1:
...

And also there is a break down after the long list of cases.

Quoted 8 lines

So it looks like:

* if _SC_SIGRT_MIN is defined we have a POSIX compilant system and we skip realtime signals in the if at line 125.

* Otherwise if system is not POSIX compilant but __SIGRTMIN and __SIGRTMAX is defined, we skip them in the hack in the switch()

Thanks so much, I just noticed that there is a "break;" at line 206 ...