Module: xenomai-head
Branch: master
Commit: afc0eac7e4989f4134b18a256b5c5e1ca1c56a39
URL:    
http://git.xenomai.org/?p=xenomai-head.git;a=commit;h=afc0eac7e4989f4134b18a256b5c5e1ca1c56a39

Author: Gilles Chanteperdrix <gilles.chanteperd...@xenomai.org>
Date:   Sun Aug 29 16:17:35 2010 +0200

posix: add a magic to internal structures.

These structures may still be referenced by a process' child if they
were destroyed by the father after the fork, so, use a magic in order
to be able to detect this case.

---

 ksrc/skins/posix/cond.c  |   37 +++++++++++++++++------------
 ksrc/skins/posix/mutex.c |   30 ++++++++++++++---------
 ksrc/skins/posix/mutex.h |    4 ++-
 ksrc/skins/posix/sem.c   |   57 ++++++++++++++++++++++++++-------------------
 src/skins/posix/mutex.c  |    6 ++--
 5 files changed, 79 insertions(+), 55 deletions(-)

diff --git a/ksrc/skins/posix/cond.c b/ksrc/skins/posix/cond.c
index f86e85e..769eb4b 100644
--- a/ksrc/skins/posix/cond.c
+++ b/ksrc/skins/posix/cond.c
@@ -51,6 +51,7 @@
 #include <posix/cond.h>
 
 typedef struct pse51_cond {
+       unsigned magic;
        xnsynch_t synchbase;
        xnholder_t link;        /* Link in pse51_condq */
 
@@ -101,7 +102,7 @@ static void cond_destroy_internal(pse51_cond_t * cond, 
pse51_kqueues_t *q)
  * @see
  * <a 
href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_cond_init.html";>
  * Specification.</a>
- * 
+ *
  */
 int pthread_cond_init(pthread_cond_t * cnd, const pthread_condattr_t * attr)
 {
@@ -142,6 +143,7 @@ int pthread_cond_init(pthread_cond_t * cnd, const 
pthread_condattr_t * attr)
        shadow->magic = PSE51_COND_MAGIC;
        shadow->cond = cond;
 
+       cond->magic = PSE51_COND_MAGIC;
        xnsynch_init(&cond->synchbase, synch_flags, NULL);
        inith(&cond->link);
        cond->attr = *attr;
@@ -179,7 +181,7 @@ int pthread_cond_init(pthread_cond_t * cnd, const 
pthread_condattr_t * attr)
  * @see
  * <a 
href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_cond_destroy.html";>
  * Specification.</a>
- * 
+ *
  */
 int pthread_cond_destroy(pthread_cond_t * cnd)
 {
@@ -189,12 +191,13 @@ int pthread_cond_destroy(pthread_cond_t * cnd)
 
        xnlock_get_irqsave(&nklock, s);
 
-       if (!pse51_obj_active(shadow, PSE51_COND_MAGIC, struct __shadow_cond)) {
+       cond = shadow->cond;
+       if (!pse51_obj_active(shadow, PSE51_COND_MAGIC, struct __shadow_cond)
+           || !pse51_obj_active(cond, PSE51_COND_MAGIC, struct pse51_cond)) {
                xnlock_put_irqrestore(&nklock, s);
                return EINVAL;
        }
 
-       cond = shadow->cond;
        if (cond->owningq != pse51_kqueues(cond->attr.pshared)) {
                xnlock_put_irqrestore(&nklock, s);
                return EPERM;
@@ -206,6 +209,7 @@ int pthread_cond_destroy(pthread_cond_t * cnd)
        }
 
        pse51_mark_deleted(shadow);
+       pse51_mark_deleted(cond);
 
        xnlock_put_irqrestore(&nklock, s);
 
@@ -224,10 +228,10 @@ static inline int mutex_save_count(xnthread_t *cur,
 {
        pse51_mutex_t *mutex;
 
-       if (!pse51_obj_active(shadow, PSE51_MUTEX_MAGIC, struct __shadow_mutex))
-                return EINVAL;
-
        mutex = shadow->mutex;
+       if (!pse51_obj_active(shadow, PSE51_MUTEX_MAGIC, struct __shadow_mutex)
+           || !pse51_obj_active(mutex, PSE51_MUTEX_MAGIC, struct pse51_mutex))
+                return EINVAL;
 
        if (xnsynch_owner_check(&mutex->synchbase, cur) != 0)
                return EPERM;
@@ -267,6 +271,7 @@ int pse51_cond_timedwait_prologue(xnthread_t *cur,
 
        /* If another thread waiting for cond does not use the same mutex */
        if (!pse51_obj_active(shadow, PSE51_COND_MAGIC, struct __shadow_cond)
+           || !pse51_obj_active(cond, PSE51_COND_MAGIC, struct pse51_cond)
            || (cond->mutex && cond->mutex != mutex->mutex)) {
                err = EINVAL;
                goto unlock_and_return;
@@ -403,7 +408,7 @@ int pse51_cond_timedwait_epilogue(xnthread_t *cur,
  * @see
  * <a 
href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_cond_wait.html";>
  * Specification.</a>
- * 
+ *
  */
 int pthread_cond_wait(pthread_cond_t * cnd, pthread_mutex_t * mx)
 {
@@ -470,7 +475,7 @@ int pthread_cond_wait(pthread_cond_t * cnd, pthread_mutex_t 
* mx)
  * @see
  * <a 
href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_cond_timedwait.html";>
  * Specification.</a>
- * 
+ *
  */
 int pthread_cond_timedwait(pthread_cond_t * cnd,
                           pthread_mutex_t * mx, const struct timespec *abstime)
@@ -521,7 +526,7 @@ int pthread_cond_timedwait(pthread_cond_t * cnd,
  * @see
  * <a 
href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_cond_signal.html.";>
  * Specification.</a>
- * 
+ *
  */
 int pthread_cond_signal(pthread_cond_t * cnd)
 {
@@ -531,12 +536,13 @@ int pthread_cond_signal(pthread_cond_t * cnd)
 
        xnlock_get_irqsave(&nklock, s);
 
-       if (!pse51_obj_active(shadow, PSE51_COND_MAGIC, struct __shadow_cond)) {
+       cond = shadow->cond;
+       if (!pse51_obj_active(shadow, PSE51_COND_MAGIC, struct __shadow_cond)
+           || !pse51_obj_active(cond, PSE51_COND_MAGIC, struct pse51_cond)) {
                xnlock_put_irqrestore(&nklock, s);
                return EINVAL;
        }
 
-       cond = shadow->cond;
 #if XENO_DEBUG(POSIX)
        if (cond->owningq != pse51_kqueues(cond->attr.pshared)) {
                xnlock_put_irqrestore(&nklock, s);
@@ -571,7 +577,7 @@ int pthread_cond_signal(pthread_cond_t * cnd)
  * @see
  * <a 
href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_cond_broadcast.html";>
  * Specification.</a>
- * 
+ *
  */
 int pthread_cond_broadcast(pthread_cond_t * cnd)
 {
@@ -581,12 +587,13 @@ int pthread_cond_broadcast(pthread_cond_t * cnd)
 
        xnlock_get_irqsave(&nklock, s);
 
-       if (!pse51_obj_active(shadow, PSE51_COND_MAGIC, struct __shadow_cond)) {
+       cond = shadow->cond;
+       if (!pse51_obj_active(shadow, PSE51_COND_MAGIC, struct __shadow_cond)
+           || !pse51_obj_active(cond, PSE51_COND_MAGIC, struct pse51_cond)) {
                xnlock_put_irqrestore(&nklock, s);
                return EINVAL;
        }
 
-       cond = shadow->cond;
        if (cond->owningq != pse51_kqueues(cond->attr.pshared)) {
                xnlock_put_irqrestore(&nklock, s);
                return EPERM;
diff --git a/ksrc/skins/posix/mutex.c b/ksrc/skins/posix/mutex.c
index 79dee73..f4ceb87 100644
--- a/ksrc/skins/posix/mutex.c
+++ b/ksrc/skins/posix/mutex.c
@@ -112,6 +112,7 @@ int pse51_mutex_init_internal(struct __shadow_mutex *shadow,
        if (attr->protocol == PTHREAD_PRIO_INHERIT)
                synch_flags |= XNSYNCH_PIP;
 
+       mutex->magic = PSE51_MUTEX_MAGIC;
        xnsynch_init(&mutex->synchbase, synch_flags, ownerp);
        inith(&mutex->link);
        mutex->attr = *attr;
@@ -148,7 +149,7 @@ int pse51_mutex_init_internal(struct __shadow_mutex *shadow,
  * @see
  * <a 
href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_mutex_init.html";>
  * Specification.</a>
- * 
+ *
  */
 int pthread_mutex_init(pthread_mutex_t *mx, const pthread_mutexattr_t *attr)
 {
@@ -246,7 +247,7 @@ void pse51_mutex_destroy_internal(pse51_mutex_t *mutex,
  * @see
  * <a 
href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_mutex_destroy.html";>
  * Specification.</a>
- * 
+ *
  */
 int pthread_mutex_destroy(pthread_mutex_t * mx)
 {
@@ -258,12 +259,13 @@ int pthread_mutex_destroy(pthread_mutex_t * mx)
        if (unlikely(cb_try_write_lock(&shadow->lock, s)))
                return EBUSY;
 
-       if (!pse51_obj_active(shadow, PSE51_MUTEX_MAGIC, struct 
__shadow_mutex)) {
+       mutex = shadow->mutex;
+       if (!pse51_obj_active(shadow, PSE51_MUTEX_MAGIC, struct __shadow_mutex)
+           || !pse51_obj_active(mutex, PSE51_MUTEX_MAGIC, struct pse51_mutex)) 
{
                cb_write_unlock(&shadow->lock, s);
                return EINVAL;
        }
 
-       mutex = shadow->mutex;
        if (pse51_kqueues(mutex->attr.pshared) != mutex->owningq) {
                cb_write_unlock(&shadow->lock, s);
                return EPERM;
@@ -280,10 +282,11 @@ int pthread_mutex_destroy(pthread_mutex_t * mx)
        }
 
        pse51_mark_deleted(shadow);
+       pse51_mark_deleted(mutex);
        cb_write_unlock(&shadow->lock, s);
 
        pse51_mutex_destroy_internal(mutex, pse51_kqueues(mutex->attr.pshared));
-       
+
        return 0;
 }
 
@@ -352,7 +355,7 @@ int pse51_mutex_timedlock_break(struct __shadow_mutex 
*shadow,
 
   unlock_and_return:
        return err;
-               
+
 }
 
 /**
@@ -381,7 +384,7 @@ int pse51_mutex_timedlock_break(struct __shadow_mutex 
*shadow,
  * @see
  * <a 
href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_mutex_trylock.html";>
  * Specification.</a>
- * 
+ *
  */
 int pthread_mutex_trylock(pthread_mutex_t *mx)
 {
@@ -399,7 +402,9 @@ int pthread_mutex_trylock(pthread_mutex_t *mx)
                return EINVAL;
 
        if (!pse51_obj_active(shadow, PSE51_MUTEX_MAGIC,
-                             struct __shadow_mutex)) {
+                             struct __shadow_mutex)
+           || !pse51_obj_active(mutex, PSE51_MUTEX_MAGIC,
+                                struct pse51_mutex)) {
                err = EINVAL;
                goto unlock_and_return;
        }
@@ -585,7 +590,7 @@ int pthread_mutex_timedlock(pthread_mutex_t * mx, const 
struct timespec *to)
  * @see
  * <a 
href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_mutex_unlock.html";>
  * Specification.</a>
- * 
+ *
  */
 int pthread_mutex_unlock(pthread_mutex_t * mx)
 {
@@ -602,14 +607,15 @@ int pthread_mutex_unlock(pthread_mutex_t * mx)
        if (unlikely(cb_try_read_lock(&shadow->lock, s)))
                return EINVAL;
 
+       mutex = shadow->mutex;
+
        if (!pse51_obj_active(shadow,
-                             PSE51_MUTEX_MAGIC, struct __shadow_mutex)) {
+                             PSE51_MUTEX_MAGIC, struct __shadow_mutex)
+           || !pse51_obj_active(mutex, PSE51_MUTEX_MAGIC, struct pse51_mutex)) 
{
                err = EINVAL;
                goto out;
        }
 
-       mutex = shadow->mutex;
-
        err = -xnsynch_owner_check(&mutex->synchbase, cur);
        if (err)
                goto out;
diff --git a/ksrc/skins/posix/mutex.h b/ksrc/skins/posix/mutex.h
index cb1b1ff..3bd2544 100644
--- a/ksrc/skins/posix/mutex.h
+++ b/ksrc/skins/posix/mutex.h
@@ -48,6 +48,7 @@ union __xeno_mutex {
 #include <posix/cb_lock.h>
 
 typedef struct pse51_mutex {
+       unsigned magic;
        xnsynch_t synchbase;
        xnholder_t link;            /* Link in pse51_mutexq */
 
@@ -94,7 +95,8 @@ static inline int pse51_mutex_timedlock_internal(xnthread_t 
*cur,
        if (xnpod_unblockable_p())
                return -EPERM;
 
-       if (!pse51_obj_active(shadow, PSE51_MUTEX_MAGIC, struct __shadow_mutex))
+       if (!pse51_obj_active(shadow, PSE51_MUTEX_MAGIC, struct __shadow_mutex)
+           || !pse51_obj_active(mutex, PSE51_MUTEX_MAGIC, struct pse51_mutex))
                return -EINVAL;
 
 #if XENO_DEBUG(POSIX)
diff --git a/ksrc/skins/posix/sem.c b/ksrc/skins/posix/sem.c
index 9ef7d90..1637422 100644
--- a/ksrc/skins/posix/sem.c
+++ b/ksrc/skins/posix/sem.c
@@ -39,6 +39,7 @@
 #include <posix/sem.h>
 
 typedef struct pse51_sem {
+       unsigned magic;
        xnsynch_t synchbase;
        xnholder_t link;        /* Link in semq */
 
@@ -84,7 +85,7 @@ static void sem_destroy_inner(pse51_sem_t * sem, 
pse51_kqueues_t *q)
        if (xnsynch_destroy(&sem->synchbase) == XNSYNCH_RESCHED)
                xnpod_schedule();
        xnlock_put_irqrestore(&nklock, s);
-       
+
        if (sem->is_named)
                xnfree(sem2named_sem(sem));
        else
@@ -97,6 +98,7 @@ static int pse51_sem_init_inner(pse51_sem_t * sem, int 
pshared, unsigned value)
        if (value > (unsigned)SEM_VALUE_MAX)
                return EINVAL;
 
+       sem->magic = PSE51_SEM_MAGIC;
        inith(&sem->link);
        appendq(&pse51_kqueues(pshared)->semq, &sem->link);
        xnsynch_init(&sem->synchbase, XNSYNCH_PRIO, NULL);
@@ -134,7 +136,7 @@ static int pse51_sem_init_inner(pse51_sem_t * sem, int 
pshared, unsigned value)
  * @see
  * <a 
href="http://www.opengroup.org/onlinepubs/000095399/functions/sem_init.html";>
  * Specification.</a>
- * 
+ *
  */
 int sem_init(sem_t * sm, int pshared, unsigned value)
 {
@@ -153,7 +155,7 @@ int sem_init(sem_t * sm, int pshared, unsigned value)
        xnlock_get_irqsave(&nklock, s);
 
        semq = &pse51_kqueues(pshared)->semq;
-       
+
        if (shadow->magic == PSE51_SEM_MAGIC
            || shadow->magic == PSE51_NAMED_SEM_MAGIC
            || shadow->magic == ~PSE51_NAMED_SEM_MAGIC) {
@@ -207,7 +209,7 @@ int sem_init(sem_t * sm, int pshared, unsigned value)
  * @see
  * <a 
href="http://www.opengroup.org/onlinepubs/000095399/functions/sem_destroy.html";>
  * Specification.</a>
- * 
+ *
  */
 int sem_destroy(sem_t * sm)
 {
@@ -215,7 +217,8 @@ int sem_destroy(sem_t * sm)
        spl_t s;
 
        xnlock_get_irqsave(&nklock, s);
-       if (shadow->magic != PSE51_SEM_MAGIC) {
+       if (shadow->magic != PSE51_SEM_MAGIC
+           || shadow->sem->magic != PSE51_SEM_MAGIC) {
                thread_set_errno(EINVAL);
                goto error;
        }
@@ -226,10 +229,11 @@ int sem_destroy(sem_t * sm)
        }
 
        pse51_mark_deleted(shadow);
+       pse51_mark_deleted(shadow->sem);
        xnlock_put_irqrestore(&nklock, s);
 
        sem_destroy_inner(shadow->sem, pse51_kqueues(shadow->sem->pshared));
-       
+
        return 0;
 
       error:
@@ -280,7 +284,7 @@ int sem_destroy(sem_t * sm)
  * @see
  * <a 
href="http://www.opengroup.org/onlinepubs/000095399/functions/sem_open.html";>
  * Specification.</a>
- * 
+ *
  */
 sem_t *sem_open(const char *name, int oflags, ...)
 {
@@ -303,7 +307,7 @@ sem_t *sem_open(const char *name, int oflags, ...)
                named_sem = node2sem(node);
                goto got_sem;
        }
-       
+
        named_sem = (nsem_t *) xnmalloc(sizeof(*named_sem));
        if (!named_sem) {
                err = ENOSPC;
@@ -328,7 +332,7 @@ sem_t *sem_open(const char *name, int oflags, ...)
        err = pse51_node_add(&named_sem->nodebase, name, PSE51_NAMED_SEM_MAGIC);
        if (err && err != EEXIST)
                goto err_put_lock;
-       
+
        if (err == EEXIST) {
                err = pse51_node_get(&node, name, PSE51_NAMED_SEM_MAGIC, 
oflags);
                if (err)
@@ -380,7 +384,7 @@ sem_t *sem_open(const char *name, int oflags, ...)
  * @see
  * <a 
href="http://www.opengroup.org/onlinepubs/000095399/functions/sem_close.html";>
  * Specification.</a>
- * 
+ *
  */
 int sem_close(sem_t * sm)
 {
@@ -391,7 +395,8 @@ int sem_close(sem_t * sm)
 
        xnlock_get_irqsave(&nklock, s);
 
-       if (shadow->magic != PSE51_NAMED_SEM_MAGIC) {
+       if (shadow->magic != PSE51_NAMED_SEM_MAGIC
+           || shadow->sem->magic != PSE51_SEM_MAGIC) {
                err = EINVAL;
                goto error;
        }
@@ -406,6 +411,7 @@ int sem_close(sem_t * sm)
        if (pse51_node_removed_p(&named_sem->nodebase)) {
                /* unlink was called, and this semaphore is no longer 
referenced. */
                pse51_mark_deleted(shadow);
+               pse51_mark_deleted(&named_sem->sembase);
                xnlock_put_irqrestore(&nklock, s);
 
                sem_destroy_inner(&named_sem->sembase, pse51_kqueues(1));
@@ -448,7 +454,7 @@ int sem_close(sem_t * sm)
  * @see
  * <a 
href="http://www.opengroup.org/onlinepubs/000095399/functions/sem_unlink.html";>
  * Specification.</a>
- * 
+ *
  */
 int sem_unlink(const char *name)
 {
@@ -468,7 +474,7 @@ int sem_unlink(const char *name)
 
        if (pse51_node_removed_p(&named_sem->nodebase)) {
                xnlock_put_irqrestore(&nklock, s);
-               
+
                sem_destroy_inner(&named_sem->sembase, pse51_kqueues(1));
        } else
                xnlock_put_irqrestore(&nklock, s);
@@ -487,8 +493,9 @@ static inline int sem_trywait_internal(struct __shadow_sem 
*shadow)
 {
        pse51_sem_t *sem;
 
-       if (shadow->magic != PSE51_SEM_MAGIC
-           && shadow->magic != PSE51_NAMED_SEM_MAGIC)
+       if ((shadow->magic != PSE51_SEM_MAGIC
+            && shadow->magic != PSE51_NAMED_SEM_MAGIC)
+           || shadow->sem->magic != PSE51_SEM_MAGIC)
                return EINVAL;
 
        sem = shadow->sem;
@@ -525,7 +532,7 @@ static inline int sem_trywait_internal(struct __shadow_sem 
*shadow)
  * * @see
  * <a 
href="http://www.opengroup.org/onlinepubs/000095399/functions/sem_trywait.html";>
  * Specification.</a>
- * 
+ *
  */
 int sem_trywait(sem_t * sm)
 {
@@ -615,7 +622,7 @@ static inline int sem_timedwait_internal(struct 
__shadow_sem *shadow,
  * @see
  * <a 
href="http://www.opengroup.org/onlinepubs/000095399/functions/sem_wait.html";>
  * Specification.</a>
- * 
+ *
  */
 int sem_wait(sem_t * sm)
 {
@@ -665,7 +672,7 @@ int sem_wait(sem_t * sm)
  * @see
  * <a 
href="http://www.opengroup.org/onlinepubs/000095399/functions/sem_timedwait.html";>
  * Specification.</a>
- * 
+ *
  */
 int sem_timedwait(sem_t * sm, const struct timespec *abs_timeout)
 {
@@ -711,7 +718,7 @@ int sem_timedwait(sem_t * sm, const struct timespec 
*abs_timeout)
  * @see
  * <a 
href="http://www.opengroup.org/onlinepubs/000095399/functions/sem_post.html";>
  * Specification.</a>
- * 
+ *
  */
 int sem_post(sem_t * sm)
 {
@@ -721,8 +728,9 @@ int sem_post(sem_t * sm)
 
        xnlock_get_irqsave(&nklock, s);
 
-       if (shadow->magic != PSE51_SEM_MAGIC
-           && shadow->magic != PSE51_NAMED_SEM_MAGIC) {
+       if ((shadow->magic != PSE51_SEM_MAGIC
+            && shadow->magic != PSE51_NAMED_SEM_MAGIC)
+           || shadow->sem->magic != PSE51_SEM_MAGIC) {
                thread_set_errno(EINVAL);
                goto error;
        }
@@ -778,7 +786,7 @@ int sem_post(sem_t * sm)
  * @see
  * <a 
href="http://www.opengroup.org/onlinepubs/000095399/functions/sem_getvalue.html";>
  * Specification.</a>
- * 
+ *
  */
 int sem_getvalue(sem_t * sm, int *value)
 {
@@ -788,8 +796,9 @@ int sem_getvalue(sem_t * sm, int *value)
 
        xnlock_get_irqsave(&nklock, s);
 
-       if (shadow->magic != PSE51_SEM_MAGIC
-           && shadow->magic != PSE51_NAMED_SEM_MAGIC) {
+       if ((shadow->magic != PSE51_SEM_MAGIC
+            && shadow->magic != PSE51_NAMED_SEM_MAGIC)
+           || shadow->sem->magic != PSE51_SEM_MAGIC) {
                xnlock_put_irqrestore(&nklock, s);
                thread_set_errno(EINVAL);
                return -1;
diff --git a/src/skins/posix/mutex.c b/src/skins/posix/mutex.c
index 4e7e35b..08eb441 100644
--- a/src/skins/posix/mutex.c
+++ b/src/skins/posix/mutex.c
@@ -36,7 +36,7 @@ static xnarch_atomic_t *get_ownerp(struct __shadow_mutex 
*shadow)
 {
        if (likely(!shadow->attr.pshared))
                return shadow->owner;
-       
+
        return (xnarch_atomic_t *) (xeno_sem_heap[1] + shadow->owner_offset);
 }
 #endif /* CONFIG_XENO_FASTSYNCH */
@@ -120,7 +120,7 @@ int __wrap_pthread_mutex_init(pthread_mutex_t *mutex,
        if (!shadow->attr.pshared)
                shadow->owner = (xnarch_atomic_t *)
                        (xeno_sem_heap[0] + shadow->owner_offset);
-       
+
        cb_write_unlock(&shadow->lock, s);
 #endif /* CONFIG_XENO_FASTSYNCH */
 
@@ -226,7 +226,7 @@ int __wrap_pthread_mutex_timedlock(pthread_mutex_t *mutex,
        if (shadow->magic != PSE51_MUTEX_MAGIC) {
                err = -EINVAL;
                goto out;
-       }       
+       }
 
        if (likely(!(xeno_get_current_mode() & XNRELAX))) {
                err = xnsynch_fast_acquire(get_ownerp(shadow), cur);


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

Reply via email to