Add _empty_p & _pop_move_blocking

This commit is contained in:
Patrick Pelissier committed 2018-10-29 13:26:16 +01:00
1 parent 4691f95b73
commit 3dde8d45c1
1 file changed
+30
+30
View File
@@ -167,6 +167,17 @@
M_CALL_CLEAN(oplist, out->data); \
m_mutex_unlock (out->lock); \
} \
,) \
\
M_IF_METHOD(TEST_EMPTY, oplist)( \
static inline bool \
M_C(name, _empty_p)(concurrent_t out) \
{ \
m_mutex_lock (out->lock); \
bool b = M_CALL_TEST_EMPTY(oplist, out->data); \
m_mutex_unlock (out->lock); \
return b; \
} \
,) \
\
M_IF_METHOD(SET_KEY, oplist)( \
@@ -361,6 +372,25 @@
m_mutex_unlock (out->lock); \
return ret; \
} \
,) \
\
M_IF_METHOD2(POP_MOVE, TEST_EMPTY, oplist)( \
static inline bool \
M_C(name, _pop_move_blocking)(M_GET_SUBTYPE oplist *p, concurrent_t out, bool blocking) \
{ \
bool ret = false; \
m_mutex_lock (out->lock); \
while (blocking) { \
if (!M_CALL_TEST_EMPTY(oplist, out->data)) { \
M_CALL_POP_MOVE(oplist, p, out->data); \
ret = true; \
break; \
} \
m_cond_wait(out->there_is_data, out->lock); \
} \
m_mutex_unlock (out->lock); \
return ret; \
} \
,) \
#endif