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 '%s'\n", xnthread_name(thread)); - xnpod_delete_thread(thread); +#ifdef CONFIG_XENO_OPT_PERVASIVE + if (xnthread_user_task(thread)) { + xnpod_suspend_thread(thread); + xnshadow_send_sig(thread, SIGSEGV, 0, 1); + } else +#endif /* CONFIG_XENO_OPT_PERVASIVE */ + xnpod_delete_thread(thread); xnsched_reset_watchdog(sched); } } -- Gilles. _______________________________________________ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core