Philippe Gerum wrote:
> Jan Kiszka wrote:
>> Philippe Gerum wrote:
>>> Jan Kiszka wrote:
>>>> Meanwhile I played with some light-weight approach to relax a thread
>>>> that received a signal (according to do_sigwake_event). Worked, but only
>>>> once due to a limitation (if not bug) of I-pipe x86: in __ipipe_run_isr,
>>>> it does not handle the case that a non-root handler may alter the
>>>> current domain, causing corruptions to the IPIPE_SYNC_FLAG states of the
>>>> involved domains.
>>> It is not a bug, this is wanted. ISR must neither change the current
>>> domain nor migrate CPU; allowing this would open Pandora's box.
>> And if there is no way to migrate from within an ISR, we can bury any
>> attempt to deliver signals to spinning Xenomai threads - or what other
>> context would remain to Xenomai for triggering migration?
> The two-phase solution I have mentioned would work.

Something like:

Index: ksrc/nucleus/sched.c
--- ksrc/nucleus/sched.c        (revision 4678)
+++ ksrc/nucleus/sched.c        (working copy)
@@ -75,7 +75,13 @@ static void xnsched_watchdog_handler(str
                           thread, xnthread_name(thread));
                xnprintf("watchdog triggered -- killing runaway thread
-               xnpod_delete_thread(thread);
+               if (xnthread_user_task(thread)) {
+                       xnpod_suspend_thread(thread);
+                       xnshadow_send_sig(thread, SIGSEGV, 0, 1);
+               } else
+                       xnpod_delete_thread(thread);


Xenomai-core mailing list

Reply via email to