Silently migrate to Linux domain before starting a task self-deletion so
that we don't raise SIGXCPU during tear-down if T_WARNSW is set.

Signed-off-by: Jan Kiszka <jan.kis...@siemens.com>
---

 src/skins/native/task.c |   15 ++++++++++++---
 1 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/skins/native/task.c b/src/skins/native/task.c
index 24da8ef..f590b79 100644
--- a/src/skins/native/task.c
+++ b/src/skins/native/task.c
@@ -121,6 +121,9 @@ static void *rt_task_trampoline(void *cookie)
        if (!err)
                entry(cookie);
 
+       /* Silently migrate to avoid raising SIGXCPU on regular exit. */
+       XENOMAI_SYSCALL1(__xn_sys_migrate, XENOMAI_LINUX_DOMAIN);
+
       fail:
 
        pthread_exit((void *)err);
@@ -265,12 +268,18 @@ int rt_task_delete(RT_TASK *task)
 {
        int err;
 
-       if (task && task->opaque2) {
+       if (!task || task->opaque == rt_task_self()->opaque) {
+               /* Silently migrate to avoid raising SIGXCPU. */
+               XENOMAI_SYSCALL1(__xn_sys_migrate, XENOMAI_LINUX_DOMAIN);
+
+               pthread_exit(NULL);
+       }
+
+       if (task->opaque2) {
                err = pthread_cancel((pthread_t)task->opaque2);
                if (err)
                        return -err;
-       } else if (!task)
-               pthread_exit(NULL);
+       }
 
        err = XENOMAI_SKINCALL1(__native_muxid, __native_task_delete, task);
        if (err == -ESRCH)

_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to