You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ry...@apache.org on 2018/11/14 16:39:14 UTC
[mynewt-nimble] 04/05: [porting][linux] Added timeout support to
Eventq Get API
This is an automated email from the ASF dual-hosted git repository.
rymek pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
commit 4b5c5ef468ba0840ba22e3bc13e55c6e1736d0b1
Author: Mehul Hirpara <me...@inedasystems.com>
AuthorDate: Wed Oct 24 17:56:11 2018 +0530
[porting][linux] Added timeout support to Eventq Get API
This change helps to get event from eventq with 0 timeout period.
---
porting/npl/linux/src/os_eventq.cc | 7 +++++--
porting/npl/linux/src/wqueue.h | 18 +++++++++++++-----
2 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/porting/npl/linux/src/os_eventq.cc b/porting/npl/linux/src/os_eventq.cc
index 2ede70b..a3c4b96 100644
--- a/porting/npl/linux/src/os_eventq.cc
+++ b/porting/npl/linux/src/os_eventq.cc
@@ -83,8 +83,11 @@ struct ble_npl_event *ble_npl_eventq_get(struct ble_npl_eventq *evq,
struct ble_npl_event *ev;
wqueue_t *q = static_cast<wqueue_t *>(evq->q);
- ev = q->get();
- ev->ev_queued = 0;
+ ev = q->get(tmo);
+
+ if (ev) {
+ ev->ev_queued = 0;
+ }
return ev;
}
diff --git a/porting/npl/linux/src/wqueue.h b/porting/npl/linux/src/wqueue.h
index 8eb23b7..0a1e7cc 100644
--- a/porting/npl/linux/src/wqueue.h
+++ b/porting/npl/linux/src/wqueue.h
@@ -54,13 +54,21 @@ public:
pthread_mutex_unlock(&m_mutex);
}
- T get() {
+ T get(uint32_t tmo) {
pthread_mutex_lock(&m_mutex);
- while (m_queue.size() == 0) {
- pthread_cond_wait(&m_condv, &m_mutex);
+ if (tmo) {
+ while (m_queue.size() == 0) {
+ pthread_cond_wait(&m_condv, &m_mutex);
+ }
}
- T item = m_queue.front();
- m_queue.pop_front();
+
+ T item = NULL;
+
+ if (m_queue.size() != 0) {
+ item = m_queue.front();
+ m_queue.pop_front();
+ }
+
pthread_mutex_unlock(&m_mutex);
return item;
}