Add _empty_p & _pop_move_blocking
This commit is contained in:
1 parent
4691f95b73
commit
3dde8d45c1
1 file changed
+30
@@ -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
|
||||
Reference in new issue
Block a user