Add new function _blocking allowing to use
runtime behavior of the blocking characteristic of the buffer regardless on how it has been configured.
This commit is contained in:
1 parent
3f7b16c736
commit
4f3823bfeb
1 file changed
+19
-4
+19
-4
@@ -230,7 +230,7 @@ M_C(name, _init)(buffer_t v, size_t size) \
|
|||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
static inline bool \
|
static inline bool \
|
||||||
M_C(name, _push)(buffer_t v, type const data) \
|
M_C(name, _push_blocking)(buffer_t v, type const data, bool blocking) \
|
||||||
{ \
|
{ \
|
||||||
BUFFERI_CONTRACT(v,m_size); \
|
BUFFERI_CONTRACT(v,m_size); \
|
||||||
\
|
\
|
||||||
@@ -239,7 +239,7 @@ M_C(name, _init)(buffer_t v, size_t size) \
|
|||||||
m_mutex_lock(v->mutex); \
|
m_mutex_lock(v->mutex); \
|
||||||
while (!BUFFERI_POLICY_P((policy), BUFFER_PUSH_OVERWRITE) \
|
while (!BUFFERI_POLICY_P((policy), BUFFER_PUSH_OVERWRITE) \
|
||||||
&& M_C(name, _full_p)(v)) { \
|
&& M_C(name, _full_p)(v)) { \
|
||||||
if (BUFFERI_POLICY_P((policy), BUFFER_UNBLOCKING_PUSH)) { \
|
if (!blocking) { \
|
||||||
m_mutex_unlock(v->mutex); \
|
m_mutex_unlock(v->mutex); \
|
||||||
return false; \
|
return false; \
|
||||||
} \
|
} \
|
||||||
@@ -300,7 +300,7 @@ M_C(name, _init)(buffer_t v, size_t size) \
|
|||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
static inline bool \
|
static inline bool \
|
||||||
M_C(name, _pop)(type *data, buffer_t v) \
|
M_C(name, _pop_blocking)(type *data, buffer_t v, bool blocking) \
|
||||||
{ \
|
{ \
|
||||||
BUFFERI_CONTRACT(v,m_size); \
|
BUFFERI_CONTRACT(v,m_size); \
|
||||||
assert (data != NULL); \
|
assert (data != NULL); \
|
||||||
@@ -309,7 +309,7 @@ M_C(name, _init)(buffer_t v, size_t size) \
|
|||||||
if (!BUFFERI_POLICY_P((policy), BUFFER_THREAD_UNSAFE)) { \
|
if (!BUFFERI_POLICY_P((policy), BUFFER_THREAD_UNSAFE)) { \
|
||||||
m_mutex_lock(v->mutex); \
|
m_mutex_lock(v->mutex); \
|
||||||
while (M_C(name, _empty_p)(v)) { \
|
while (M_C(name, _empty_p)(v)) { \
|
||||||
if (BUFFERI_POLICY_P((policy), BUFFER_UNBLOCKING_POP)) { \
|
if (!blocking) { \
|
||||||
m_mutex_unlock(v->mutex); \
|
m_mutex_unlock(v->mutex); \
|
||||||
return false; \
|
return false; \
|
||||||
} \
|
} \
|
||||||
@@ -354,6 +354,21 @@ M_C(name, _init)(buffer_t v, size_t size) \
|
|||||||
return true; \
|
return true; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
|
\
|
||||||
|
static inline bool \
|
||||||
|
M_C(name, _push)(buffer_t v, type const data) \
|
||||||
|
{ \
|
||||||
|
return M_C(name, _push_blocking)(v, data, \
|
||||||
|
!BUFFERI_POLICY_P((policy), BUFFER_UNBLOCKING_PUSH)); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
static inline bool \
|
||||||
|
M_C(name, _pop)(type *data, buffer_t v) \
|
||||||
|
{ \
|
||||||
|
return M_C(name, _pop_blocking)(data, v, \
|
||||||
|
!BUFFERI_POLICY_P((policy), BUFFER_UNBLOCKING_POP)); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
static inline size_t \
|
static inline size_t \
|
||||||
M_C(name, _overwrite)(const buffer_t v) \
|
M_C(name, _overwrite)(const buffer_t v) \
|
||||||
{ \
|
{ \
|
||||||
|
|||||||
Reference in new issue
Block a user