Module: xenomai-3 Branch: next Commit: a3d9da699e62df122bea5213b5724d96aa0025af URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=a3d9da699e62df122bea5213b5724d96aa0025af
Author: Philippe Gerum <r...@xenomai.org> Date: Fri Jul 17 17:20:12 2015 +0200 rtdm/waitqueue: fix error codes --- include/cobalt/kernel/rtdm/driver.h | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/include/cobalt/kernel/rtdm/driver.h b/include/cobalt/kernel/rtdm/driver.h index 4853ba9..80308ca 100644 --- a/include/cobalt/kernel/rtdm/driver.h +++ b/include/cobalt/kernel/rtdm/driver.h @@ -656,13 +656,28 @@ static inline void rtdm_waitqueue_destroy(struct rtdm_waitqueue *wq) xnsynch_destroy(&wq->wait); } +static inline int __rtdm_dowait(struct rtdm_waitqueue *wq, + nanosecs_rel_t timeout, xntmode_t timeout_mode) +{ + int ret; + + ret = xnsynch_sleep_on(&wq->wait, timeout, timeout_mode); + if (ret & XNBREAK) + return -EINTR; + if (ret & XNTIMEO) + return -ETIMEDOUT; + if (ret & XNRMID) + return -EIDRM; + return 0; +} + static inline int __rtdm_timedwait(struct rtdm_waitqueue *wq, nanosecs_rel_t timeout, rtdm_toseq_t *toseq) { if (toseq && timeout > 0) - return xnsynch_sleep_on(&wq->wait, *toseq, XN_ABSOLUTE); + return __rtdm_dowait(wq, *toseq, XN_ABSOLUTE); - return xnsynch_sleep_on(&wq->wait, timeout, XN_RELATIVE); + return __rtdm_dowait(wq, timeout, XN_RELATIVE); } #define rtdm_timedwait_condition_locked(__wq, __cond, __timeout, __toseq) \ @@ -677,8 +692,8 @@ static inline int __rtdm_timedwait(struct rtdm_waitqueue *wq, ({ \ int __ret = 0; \ while (__ret == 0 && !(__cond)) \ - __ret = xnsynch_sleep_on(&(__wq)->wait, \ - XN_INFINITE, XN_RELATIVE); \ + __ret = __rtdm_dowait(__wq, \ + XN_INFINITE, XN_RELATIVE); \ __ret; \ }) @@ -710,7 +725,7 @@ static inline int __rtdm_timedwait(struct rtdm_waitqueue *wq, }) #define rtdm_wait(__wq) \ - xnsynch_sleep_on(&(__wq)->wait, XN_INFINITE, XN_RELATIVE) + __rtdm_dowait(__wq, XN_INFINITE, XN_RELATIVE) #define rtdm_wait_locked(__wq) rtdm_wait(__wq) _______________________________________________ Xenomai-git mailing list Xenomai-git@xenomai.org http://xenomai.org/mailman/listinfo/xenomai-git