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

Author: Gilles Chanteperdrix <gilles.chanteperd...@xenomai.org>
Date:   Mon Dec 26 17:30:46 2011 +0100

posix: fix pthread_mutex_trylock in FASTSYNCH case

---

 src/skins/posix/mutex.c |   16 +++++++++++++++-
 1 files changed, 15 insertions(+), 1 deletions(-)

diff --git a/src/skins/posix/mutex.c b/src/skins/posix/mutex.c
index 6f60d93..a295b15 100644
--- a/src/skins/posix/mutex.c
+++ b/src/skins/posix/mutex.c
@@ -290,6 +290,8 @@ int __wrap_pthread_mutex_trylock(pthread_mutex_t *mutex)
        int err;
 
 #ifdef CONFIG_XENO_FASTSYNCH
+       extern int __wrap_clock_gettime(clockid_t clock_id, struct timespec 
*tp);
+       struct timespec ts;
        unsigned long status;
        xnhandle_t cur;
 
@@ -342,13 +344,25 @@ int __wrap_pthread_mutex_trylock(pthread_mutex_t *mutex)
        return -err;
 
 do_syscall:
-#endif /* !CONFIG_XENO_FASTSYNCH */
+       __wrap_clock_gettime(CLOCK_REALTIME, &ts);
+       do {
+               err = XENOMAI_SKINCALL2(__pse51_muxid,
+                                       __pse51_mutex_timedlock, shadow, &ts);
+       } while (err == -EINTR);
+       if (err == -ETIMEDOUT || err == -EDEADLK)
+               err = -EBUSY;
+
+       cb_read_unlock(&shadow->lock, s);
+
+#else /* !CONFIG_XENO_FASTSYNCH */
 
        do {
                err = XENOMAI_SKINCALL1(__pse51_muxid,
                                        __pse51_mutex_trylock, shadow);
        } while (err == -EINTR);
 
+#endif /* !CONFIG_XENO_FASTSYNCH */
+
        return -err;
 }
 


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

Reply via email to