* [Xenomai-help] Signals
@ 2006-01-18 21:24 Kent Borg
2006-01-25 20:20 ` Jan Kiszka
0 siblings, 1 reply; 4+ messages in thread
From: Kent Borg @ 2006-01-18 21:24 UTC (permalink / raw)
To: xenomai
Thanks for the news that gdb should just work.
Now I am wondering about signals. I want to be able to send a regular
Linux signal to a userland realtime process. Do I use the regular
signal() to install a signal handler? When would I use
rt_task_catch() and rt_task_notify()?
What about multiple threads? I have 2 threads running. It seems that
the thread that called signal() is the one landing in the handler
routine. I would like to set some flags for the second thread to see,
so it can cleanup things before quiting, but it seems that my second
thread isn't running after I send the signal. I also think I am
corrupting something, because if I set up a loop that launches and
kills my program, my machine freezes up after a dozen cycles. I
commented out most of my guts and it still freezes up.
Thanks,
-kb
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Xenomai-help] Signals
2006-01-18 21:24 [Xenomai-help] Signals Kent Borg
@ 2006-01-25 20:20 ` Jan Kiszka
2006-01-25 21:24 ` Kent Borg
0 siblings, 1 reply; 4+ messages in thread
From: Jan Kiszka @ 2006-01-25 20:20 UTC (permalink / raw)
To: Kent Borg; +Cc: xenomai
[-- Attachment #1: Type: text/plain, Size: 1520 bytes --]
Kent Borg wrote:
> Thanks for the news that gdb should just work.
>
> Now I am wondering about signals. I want to be able to send a regular
> Linux signal to a userland realtime process. Do I use the regular
> signal() to install a signal handler? When would I use
> rt_task_catch() and rt_task_notify()?
Those function are - in contrast to what to doc states - not yet
available in userspace. So far Xenomai is lacking the infrastructure to
deliver hard-RT signals to userspace threads, only the Linux signals are
passed as usual.
>
> What about multiple threads? I have 2 threads running. It seems that
> the thread that called signal() is the one landing in the handler
> routine. I would like to set some flags for the second thread to see,
> so it can cleanup things before quiting, but it seems that my second
> thread isn't running after I send the signal. I also think I am
> corrupting something, because if I set up a loop that launches and
> kills my program, my machine freezes up after a dozen cycles. I
> commented out most of my guts and it still freezes up.
Signals in multithreaded applications are tricky in general, even
without Xenomai. You may try to play with pthread_kill and
pthread_sigmask to control which thread receives a specific signal.
When the signal receiver is a Xenomai thread, the usual things happen:
blocking on RT-resources is cleared, the thread is migrated to secondary
mode, and the signal handler is invoked as one expects.
Jan
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 252 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Xenomai-help] Signals
2006-01-25 20:20 ` Jan Kiszka
@ 2006-01-25 21:24 ` Kent Borg
2006-01-25 22:31 ` Jan Kiszka
0 siblings, 1 reply; 4+ messages in thread
From: Kent Borg @ 2006-01-25 21:24 UTC (permalink / raw)
To: Jan Kiszka; +Cc: xenomai
On Wed, Jan 25, 2006 at 09:20:28PM +0100, Jan Kiszka wrote:
> > rt_task_catch() and rt_task_notify()?
>
> Those function are - in contrast to what to doc states - not yet
> available in userspace.
No wonder information on them is so sparse.
> So far Xenomai is lacking the infrastructure to
> deliver hard-RT signals to userspace threads, only the Linux signals are
> passed as usual.
But they are passed, that is good.
> Signals in multithreaded applications are tricky in general, even
> without Xenomai. You may try to play with pthread_kill and
> pthread_sigmask to control which thread receives a specific signal.
I have a very simple architecture, one thread is launched by regular
means, is launches the RT thread. It is the parent thread that
registers for the signal and (I think!) it is the one that gets the
interrupt.
> When the signal receiver is a Xenomai thread, the usual things happen:
> blocking on RT-resources is cleared, the thread is migrated to secondary
> mode, and the signal handler is invoked as one expects.
Very interesting. It sounds like Xenomai is doing cleanup I was
trying to do by hand. Maybe that is why I crapped the kernel, I am
cleaning up stuff that doesn't exist anymore. Should I deallocate my
RT fifos?
Thanks,
-kb
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Xenomai-help] Signals
2006-01-25 21:24 ` Kent Borg
@ 2006-01-25 22:31 ` Jan Kiszka
0 siblings, 0 replies; 4+ messages in thread
From: Jan Kiszka @ 2006-01-25 22:31 UTC (permalink / raw)
To: Kent Borg; +Cc: xenomai
[-- Attachment #1: Type: text/plain, Size: 1974 bytes --]
Kent Borg wrote:
> On Wed, Jan 25, 2006 at 09:20:28PM +0100, Jan Kiszka wrote:
>>> rt_task_catch() and rt_task_notify()?
>> Those function are - in contrast to what to doc states - not yet
>> available in userspace.
>
> No wonder information on them is so sparse.
>
>> So far Xenomai is lacking the infrastructure to
>> deliver hard-RT signals to userspace threads, only the Linux signals are
>> passed as usual.
>
> But they are passed, that is good.
>
>> Signals in multithreaded applications are tricky in general, even
>> without Xenomai. You may try to play with pthread_kill and
>> pthread_sigmask to control which thread receives a specific signal.
>
> I have a very simple architecture, one thread is launched by regular
> means, is launches the RT thread. It is the parent thread that
> registers for the signal and (I think!) it is the one that gets the
> interrupt.
Try printing pthread_self in your signal handler to be sure.
>
>> When the signal receiver is a Xenomai thread, the usual things happen:
>> blocking on RT-resources is cleared, the thread is migrated to secondary
>> mode, and the signal handler is invoked as one expects.
>
> Very interesting. It sounds like Xenomai is doing cleanup I was
> trying to do by hand. Maybe that is why I crapped the kernel, I am
> cleaning up stuff that doesn't exist anymore. Should I deallocate my
> RT fifos?
>
No, the native skin does not perform much automatic cleanup, especially
not for userspace objects. If I'm not overseeing some detail, the only
thing that gets cleaned up automatically on process termination are
tasks. Even on unloading the native skin module (when being a module at
all anymore), no forgotten userspace object gets deleted. The posix skin
does such cleanup, but only globally, on module unload.
So the rule is the cleanup everything as long as you are able to (i.e.
your application didn't die due to some bug etc.)
Jan
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 252 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2006-01-25 22:31 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-01-18 21:24 [Xenomai-help] Signals Kent Borg
2006-01-25 20:20 ` Jan Kiszka
2006-01-25 21:24 ` Kent Borg
2006-01-25 22:31 ` Jan Kiszka
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.