POSIX signal handling
Joel Sherrill
joel.sherrill at OARcorp.com
Tue Mar 31 18:22:54 UTC 2009
Sérgio Santos wrote:
> And now the handler executes just fine in the example!! So thank you for that!
>
> I have to let until tomorrow a more complete analysis (in terms of our app instead of the example). I will then post our comments (if any!).
>
>
Just remember there is a process set of signals/mask and a per thread
set of signals/mask. Process signals go to the first thread that is
interested
with first being a relative term. There is a hierarchy based upon state
and priority.
--joel
> Best regards,
> Sérgio
>
>
>
>> -----Original Message-----
>> From: Joel Sherrill [mailto:joel.sherrill at OARcorp.com]
>> Sent: terça-feira, 31 de Março de 2009 17:06
>> To: Sérgio Santos
>> Cc: rtems-users at rtems.com
>> Subject: Re: POSIX signal handling
>>
>> How about this version?
>>
>> RTEMS is multi-threaded within a single process and no thread
>> had ever enabled SIGALRM.
>>
>> This MIGHT be a buglet in relation to the default signal mask
>> but we would have to consult the Open Group specification to
>> be sure.
>>
>> Sérgio Santos wrote:
>>
>>> Thanks again for your kind answer.
>>>
>>> Actually we've had that very output... since the beginning :)
>>> Ever since the problem for us is we're expecting not the signal to be
>>>
>> pending, but otherwise that the handler *sig_handler* runs when the signal
>> is received!
>>
>>> We're running the same code, and - glad to know by comparing - no
>>>
>> problems coming from our makefile. So we'd expect something like the
>> output in Linux (every second):
>>
>>> [sbrotas at imaserver2 sigact]$ ./sigact
>>> HANDLER: caught SIGALRM
>>> SIGALRM not pending :)
>>>
>>> HANDLER: caught SIGALRM
>>> SIGALRM not pending :)
>>>
>>> ^C
>>> [sbrotas at imaserver2 sigact]$
>>>
>>> ---
>>> Best Regards
>>> Sérgio
>>>
>>>
>>>
>>>
>>>
>>>> -----Original Message-----
>>>> From: Joel Sherrill [mailto:joel.sherrill at OARcorp.com]
>>>> Sent: terça-feira, 31 de Março de 2009 14:11
>>>> To: Sérgio Santos
>>>> Cc: rtems-users at rtems.com
>>>> Subject: Re: POSIX signal handling
>>>>
>>>> Sérgio Santos wrote:
>>>>
>>>>
>>>>> Hi, Joel
>>>>> I'm using qemu (mostly) but have tried running directly on the target
>>>>>
>>>>>
>>>> too.
>>>>
>>>>
>>>>> Our current guess is some build configuration conflict or mistake, but
>>>>>
>>>>>
>>>> we're still to find what exactly. Still, we haven't debugged much for
>>>>
>> some
>>
>>>> clues or looked at the rtems code.
>>>>
>>>> Runs for me. I attached my version of your code and the
>>>> Makefile.
>>>>
>>>> Built on an installed BSP like this:
>>>>
>>>>
>>>> RTEMS_MAKEFILE_PATH=/home/joel/rtems-4.10-work/bsp-install/i386-
>>>> rtems4.10/pc386
>>>> make clean all
>>>>
>>>> [joel at iceland sigaction]$ runqemu -i */*exe
>>>> Running o-optimize/sigaction.exe
>>>> Could not open '/dev/kqemu' - QEMU acceleration layer not activated: No
>>>> such file or directory
>>>> SIGALRM is pending
>>>>
>>>> SIGALRM is pending
>>>>
>>>> SIGALRM is pending
>>>>
>>>> SIGALRM is pending
>>>>
>>>> SIGALRM is pending
>>>>
>>>> SIGALRM is pending
>>>>
>>>> /home/joel/bin/runqemu: line 65: 15963 Killed ${QEMU}
>>>> ${ARGS}
>>>> Could not open '/dev/kqemu' - QEMU acceleration layer not activated: No
>>>> such file or directory
>>>> SIGALRM is pending
>>>>
>>>>
>>>>
>>>>> Our option is now getting closer to drop POSIX and go for the RTEMS
>>>>>
>>>>>
>>>> classic API on the async signals matter in particular, and for the port
>>>>
>> of
>>
>>>> our Linux app overall. Still we'll report any findings.
>>>>
>>>>
>>>>> Thank you much
>>>>>
>>>>> Sérgio
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>> -----Original Message-----
>>>>>> From: Joel Sherrill [mailto:joel.sherrill at OARcorp.com]
>>>>>> Sent: segunda-feira, 30 de Março de 2009 20:30
>>>>>> To: Sérgio Santos
>>>>>> Cc: rtems-users at rtems.com
>>>>>> Subject: Re: POSIX signal handling
>>>>>>
>>>>>> Sérgio Santos wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>>> -----Original Message-----
>>>>>>>> From: Joel Sherrill [mailto:joel.sherrill at OARcorp.com]
>>>>>>>> Sent: segunda-feira, 30 de Março de 2009 19:11
>>>>>>>> To: Sérgio Santos
>>>>>>>> Cc: rtems-users at rtems.com
>>>>>>>> Subject: Re: POSIX signal handling
>>>>>>>>
>>>>>>>> Sergios,
>>>>>>>>
>>>>>>>> I meant to ask.. Is it ok to include this in the RTEMS examples
>>>>>>>> as a simple example of alarm and signals?
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>> Joel,
>>>>>>>
>>>>>>> Sure! Can't help feeling it's a privilege, despite the simplicity of
>>>>>>>
>>>>>>>
>>>> the
>>>>
>>>>
>>>>>> code :) Nevertheless I must say I'd be happier if it would work at
>>>>>>
>> all
>>
>>>> in
>>>>
>>>>
>>>>>> my system! (please see below)
>>>>>>
>>>>>>
>>>>>>
>>>>>>>> Joel Sherrill wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> OK.. runs for me with the CVS head.
>>>>>>>>>
>>>>>>>>> You forget to include <rtems/confdefs.h> at the bottom after
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>> CONFIGURE_INIT.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>> You're right in pointing this, it was actually an unfortunate
>>>>>>>
>> typo...
>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> :) I expected as much. :)
>>>>>>
>>>>>>
>>>>>>
>>>>>>>>> And delete the timer configuration.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>> Done already! So a conclusion is still open for me, the code is ok,
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> configuration is (now) ok, but instead of the current 4.8.1, I should
>>>>>>
>>>>>>
>>>> try
>>>>
>>>>
>>>>>> it with the CVS head (4.9.99?)
>>>>>>
>>>>>>
>>>>>> How are you running it?
>>>>>>
>>>>>>
>>>>>>
>>>>>>> Thanks again for your help,
>>>>>>>
>>>>>>> Sérgio
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>> Folks .. please consider support agreements. :-D
>>>>>>>>> --joel
>>>>>>>>>
>>>>>>>>> Sérgio Santos wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> Hello all,
>>>>>>>>>>
>>>>>>>>>> I'm using rtems 4.8.1, target is i386 (single core, with FC9),
>>>>>>>>>>
>>>>>>>>>>
>>>> using
>>>>
>>>>
>>>>>>>> bsp's between pc386 and pc686 and the RTEMS makefile templates.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>> I have been trying to port a Linux based application to RTEMS and
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>> found
>>>>>>
>>>>>>
>>>>>>
>>>>>>>> at some point I couldn't get POSIX signal handlers (set with
>>>>>>>>
>>>>>>>>
>>>> sigaction)
>>>>
>>>>
>>>>>> to
>>>>>>
>>>>>>
>>>>>>
>>>>>>>> ever execute. From what I've read in rtems-users and user docs, no
>>>>>>>> problems should arise from using POSIX asynchronous signal handling
>>>>>>>>
>>>>>>>>
>>>> in
>>>>
>>>>
>>>>>>>> RTEMS, so my guess is I'm making some naïve mistake on code or
>>>>>>>> configuration...
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>> Also, searching on the list, came across a similar problem, but
>>>>>>>>>>
>>>>>>>>>>
>>>> this
>>>>
>>>>
>>>>>>>> was a unique case and a long while ago:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>> http://www.rtems.com/ml/rtems-users/2002/september/msg00015.html
>>>>>>>>>> Unfortunately that thread was not conclusive.
>>>>>>>>>>
>>>>>>>>>> After a few other tests I've got down to a simple test
>>>>>>>>>>
>> application
>>
>>>>>>>>>>
>>>>>> (see
>>>>>>
>>>>>>
>>>>>>
>>>>>>>> below), similar to the code in the post I mentioned above: a thread
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>> sets
>>>>>>
>>>>>>
>>>>>>
>>>>>>>> sigaction and just does alarm(1), sleep(3) in a cycle. Alike the
>>>>>>>>
>>>>>>>>
>>>> other
>>>>
>>>>
>>>>>>>> tests, in RTEMS the handler never gets to run (although the signal
>>>>>>>> (SIGALRM) is seen pending); in Linux all tests will work.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>> POSIX was enabled in the build configuration:
>>>>>>>>>> ../../../rtems-4.8.1/c/configure --prefix=/opt/rtems-4.8 --
>>>>>>>>>>
>>>>>>>>>>
>>>> host=i386-
>>>>
>>>>
>>>>>>>> rtems4.8 --build=i686-pc-linux-gnu --target=i386-rtems4.8 --enable-
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>> posix -
>>>>>>
>>>>>>
>>>>>>
>>>>>>>> -disable-itron --enable-networking --enable-cxx --enable-rtems-
>>>>>>>>
>> debug
>>
>>>> --
>>>>
>>>>
>>>>>>>> enable-rdbg --enable-rtemsbsp=pc386 --with-target-subdir=i386-
>>>>>>>>
>>>>>>>>
>>>> rtems4.8
>>>>
>>>>
>>>>>> --
>>>>>>
>>>>>>
>>>>>>
>>>>>>>> exec-prefix=/opt/rtems-4.8/i386-rtems4.8 --includedir=/opt/rtems-
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>> 4.8/i386-
>>>>>>
>>>>>>
>>>>>>
>>>>>>>> rtems4.8/include --cache-file=/dev/null --srcdir=../../../rtems-
>>>>>>>>
>>>>>>>>
>>>> 4.8.1/c
>>>>
>>>>
>>>>>>>>>> I post below the src for the simple test, having the RTEMS
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>> definitions
>>>>>>
>>>>>>
>>>>>>
>>>>>>>> in the end.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>> Thanks in advance for your help!
>>>>>>>>>>
>>>>>>>>>> Sérgio Santos
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --------------
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> #include <signal.h>
>>>>>>>>>> #include <stdio.h>
>>>>>>>>>> #include <unistd.h>
>>>>>>>>>> #include <stdlib.h>
>>>>>>>>>>
>>>>>>>>>> #include <bsp.h>
>>>>>>>>>>
>>>>>>>>>> void sig_handler(int sig){
>>>>>>>>>> switch(sig){
>>>>>>>>>> case SIGALRM:
>>>>>>>>>> printf("HANDLER: caught SIGALRM\n");
>>>>>>>>>> break;
>>>>>>>>>> default:
>>>>>>>>>> printf("Received unexpected signal (%d)\nBye!", sig);
>>>>>>>>>> exit(1);
>>>>>>>>>> }
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> void sig_init(){
>>>>>>>>>>
>>>>>>>>>> int rc;
>>>>>>>>>> sigset_t sigset;
>>>>>>>>>> struct sigaction sigact;
>>>>>>>>>>
>>>>>>>>>> rc = sigemptyset(&sigset);
>>>>>>>>>> if (rc != 0) {
>>>>>>>>>> printf("Can't empty set\n");exit(1);
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> sigact.sa_mask = sigset;
>>>>>>>>>> sigact.sa_flags = 0;
>>>>>>>>>> sigact.sa_handler = &sig_handler;
>>>>>>>>>>
>>>>>>>>>> rc = sigaction(SIGALRM, &sigact, NULL);
>>>>>>>>>> if (rc != 0) {
>>>>>>>>>> printf("Can't install handler\n"); exit(1);
>>>>>>>>>> }
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> void *POSIX_Init(void *arg){
>>>>>>>>>>
>>>>>>>>>> int rc = 0;
>>>>>>>>>> sigset_t pendingset;
>>>>>>>>>>
>>>>>>>>>> sig_init();
>>>>>>>>>>
>>>>>>>>>> rc = sigemptyset(&pendingset);
>>>>>>>>>> if (rc != 0) {
>>>>>>>>>> printf("Can't empty set\n");exit(1);
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> while(1){
>>>>>>>>>> alarm(1);
>>>>>>>>>> sleep(3);
>>>>>>>>>> sigpending(&pendingset);
>>>>>>>>>> printf("%s\n\n", ( sigismember(&pendingset, SIGALRM) ?
>>>>>>>>>> "SIGALRM is pending" : "SIGALRM not pending"
>>>>>>>>>>
>>>>>>>>>>
>>>> ));
>>>>
>>>>
>>>>>>>>>> }
>>>>>>>>>> return 0;
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> #define CONFIGURE_MAXIMUM_POSIX_THREADS 10
>>>>>>>>>> #define CONFIGURE_MAXIMUM_POSIX_MUTEXES 10
>>>>>>>>>> #define CONFIGURE_MAXIMUM_POSIX_TIMERS 10
>>>>>>>>>> #define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS 40
>>>>>>>>>>
>>>>>>>>>> #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
>>>>>>>>>> #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
>>>>>>>>>> #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
>>>>>>>>>> #define CONFIGURE_POSIX_INIT_THREAD_TABLE
>>>>>>>>>> #define CONFIGURE_INIT
>>>>>>>>>>
>>>>>>>>>> // EOF
>>>>>>>>>> ----
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> rtems-users mailing list
>>>>>>>>>> rtems-users at rtems.com
>>>>>>>>>> http://rtems.rtems.org/mailman/listinfo/rtems-users
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>> --
>>>>>>>> Joel Sherrill, Ph.D. Director of Research & Development
>>>>>>>> joel.sherrill at OARcorp.com On-Line Applications Research
>>>>>>>> Ask me about RTEMS: a free RTOS Huntsville AL 35805
>>>>>>>> Support Available (256) 722-9985
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>> --
>>>>>> Joel Sherrill, Ph.D. Director of Research & Development
>>>>>> joel.sherrill at OARcorp.com On-Line Applications Research
>>>>>> Ask me about RTEMS: a free RTOS Huntsville AL 35805
>>>>>> Support Available (256) 722-9985
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>> --
>>>> Joel Sherrill, Ph.D. Director of Research & Development
>>>> joel.sherrill at OARcorp.com On-Line Applications Research
>>>> Ask me about RTEMS: a free RTOS Huntsville AL 35805
>>>> Support Available (256) 722-9985
>>>>
>>>>
>>>>
>>>
>> --
>> Joel Sherrill, Ph.D. Director of Research & Development
>> joel.sherrill at OARcorp.com On-Line Applications Research
>> Ask me about RTEMS: a free RTOS Huntsville AL 35805
>> Support Available (256) 722-9985
>>
>>
>
>
--
Joel Sherrill, Ph.D. Director of Research & Development
joel.sherrill at OARcorp.com On-Line Applications Research
Ask me about RTEMS: a free RTOS Huntsville AL 35805
Support Available (256) 722-9985
More information about the users
mailing list