And here goes the patch for the signal_test_failure.
Signed-off-by: Suzuki KP <[EMAIL PROTECTED]>
--- signal_test_01.c.orig 2008-05-20 14:52:55.884753744 +0530
+++ signal_test_01.c 2008-05-20 15:00:18.117524144 +0530
@@ -251,18 +251,16 @@ int main (int argc, char **argv)
/* Change the process signal mask:
*
- * Now specifiy a new process signal mask to allow the SIGINT signal
- * to interrupt the process. Thus by using sigpause (), force the
- * process to suspend execution until delivery of an unblocked
- * signal (SIGINT in this case).
+ * Now allow the SIGINT signal to interrupt the process.
+ * Thus by using sigpause (), force the process to suspend
+ * execution until delivery of an unblocked signal (here SIGINT).
*
* Additionally, verify that the SIGINT signal was received.
*/
valid_sig [SIGINT] = 1;
printf ("\n\tChange signal mask & wait until signal interrupts process
\n");
- mask = 0xFFFF ^ SIGINT;
- if (sigpause (mask) != -1 || errno != 4)
+ if (sigpause (SIGINT) != -1 || errno != 4)
sys_error ("sigpause failed", __LINE__);
if (valid_sig [SIGINT])
============================================================
Solution Description:
============================================================
man sigpause() says :
DESCRIPTION
Don’t use this function. Use sigsuspend(2) instead. :)
There are two variants of sigpause. The code in signal_test_01.c assumes the
argument is sigmask. While, upon testing I could figure out that the argument is
interpreted as the signal.
This is an issue with the testcase.
According to man sigpause :
int sigpause(int sigmask); /* BSD */
int sigpause(int sig); /* System V / Unix95 */
[...]
Linux Notes
On Linux, this routine is a system call only on the Sparc (sparc64)
architecture.
Libc4 and libc5 only know about the BSD version.
Glibc uses the BSD version if the _BSD_SOURCE feature test macro is
defined and none of _POSIX_SOURCE, _POSIX_C_SOURCE, _XOPEN_SOURCE, _GNU_SOURCE,
or _SVID_SOURCE is defined. The System V version is used if _XOPEN_SOURCE is
defined.
Since the _BSD_SOURCE_ is not defined for LTP testcases, rather they define
_XOPEN_SOURCE_, the behaviour is System V, where they expect a signal number
instead of signal mask.
Thanks
Suzuki
============================================================================
Regards--
Subrata
On Mon, 2008-05-19 at 13:37 +0530, Subrata Modak wrote:
> On Fri, 2008-05-16 at 16:59 -0300, Edjunior Barbosa Machado wrote:
> > Hi,
> >
> > running signal_test_01 IPC stress testcase in x86 and x86_64 machines, we
> > faced the messages below:
> >
> > # cd ltp-full-20080430/testcases/kernel/ipc/ipc_stress/
> > # ./signal_test_01
> > ./signal_test_01: IPC Signals TestSuite program
> >
> > Send SIGILL, SIGALRM, SIGIOT signals to process
> > received signal: (SIGILL)
> > received signal: (SIGALRM)
> > received signal: (SIGIOT/SIGABRT)
> >
> > Block SIGILL, SIGALRM, SIGIOT signals, and resend signals + others
> > received signal: (SIGFPE)
> > received signal: (SIGTERM)
> > received signal: (SIGINT)
> >
> > Block rest of signals
> >
> > Change signal mask & wait until signal interrupts process
> > ERROR [line: 266] sigpause failed: Invalid argument
> >
> > : Invalid argument
> >
> >
> > The problems seems to be related to this piece of code:
> >
> > /* Change the process signal mask:
> > *
> > * Now specifiy a new process signal mask to allow the SIGINT signal
> > * to interrupt the process. Thus by using sigpause (), force the
> > * process to suspend execution until delivery of an unblocked
> > * signal (SIGINT in this case).
> > *
> > * Additionally, verify that the SIGINT signal was received.
> > */
> > valid_sig [SIGINT] = 1;
> >
> > printf ("\n\tChange signal mask & wait until signal interrupts
> > process\n");
> > mask = 0xFFFF ^ SIGINT;
> > if (sigpause (mask) != -1 || errno != 4)
> > sys_error ("sigpause failed", __LINE__);
> >
> > if (valid_sig [SIGINT])
> > error ("failed to receive SIGINT signal!", __LINE__);
> >
> >
> > `man sigpause` says there are 2 versions of this function: one considering
> > a signal as parameter (afaik, the default model) and another using a mask.
> > In this case, sigpause() uses this second version. I've already test it
> > using SIGINT as parameter and it seemed OK. I've also tried to force to
> > sigpause() to use a mask adding defines mentioned in manpage, without
> > success.
> >
> > In addiction, the manpage also advices to don't use this function and use
> > sigsuspend() instead. However, I'm not sure if substitute a focused system
> > call (like sigpause() in this case) is reasonable for LTP testsuits.
> >
> > Would you please suggest what could be an acceptable solution for this
> > issue?
>
> Yes, that can be.
>
> Mike,
> What do you say ?
>
> Regards--
> Subrata
>
> >
> > Thanks in advance,
> >
> > --
> > Edjunior
> >
> > -------------------------------------------------------------------------
> > This SF.net email is sponsored by: Microsoft
> > Defy all challenges. Microsoft(R) Visual Studio 2008.
> > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> > _______________________________________________
> > Ltp-list mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/ltp-list
>
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2008.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> _______________________________________________
> Ltp-list mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ltp-list
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list