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