Hi,

it seems that rt_task_shadow currently leaves the self tsd assigned (and
uninitialized) in case of error. So, here is an attempt to fix this
situation:

Index: src/skins/native/task.c
===================================================================
--- src/skins/native/task.c     (revision 4727)
+++ src/skins/native/task.c     (working copy)
@@ -187,15 +187,8 @@

 #ifdef HAVE___THREAD
        self = &__native_self;
-#else /* !HAVE___THREAD */
-       self = pthread_getspecific(__native_tskey);
+#endif /* HAVE___THREAD */

-       if (!self)
-               self = malloc(sizeof(*self));
-
-       pthread_setspecific(__native_tskey, self);
-#endif /* !HAVE___THREAD */
-
        if (task == NULL)
                task = &task_desc; /* Discarded. */

@@ -217,9 +210,13 @@
                                NULL);

        if (!err) {
-               if (self)
-                       *self = *task;
+#ifndef HAVE___THREAD
+               self = malloc(sizeof(*self));

+               pthread_setspecific(__native_tskey, self);
+#endif /* !HAVE___THREAD */
+               *self = *task;
+
                xeno_set_current();

                if (mode & T_WARNSW)


-- 
                                                 Gilles.

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

Reply via email to