diff options
Diffstat (limited to 'deps/jemalloc/test/include/test/mq.h')
-rw-r--r-- | deps/jemalloc/test/include/test/mq.h | 107 |
1 files changed, 0 insertions, 107 deletions
diff --git a/deps/jemalloc/test/include/test/mq.h b/deps/jemalloc/test/include/test/mq.h deleted file mode 100644 index af2c078da..000000000 --- a/deps/jemalloc/test/include/test/mq.h +++ /dev/null @@ -1,107 +0,0 @@ -void mq_nanosleep(unsigned ns); - -/* - * Simple templated message queue implementation that relies on only mutexes for - * synchronization (which reduces portability issues). Given the following - * setup: - * - * typedef struct mq_msg_s mq_msg_t; - * struct mq_msg_s { - * mq_msg(mq_msg_t) link; - * [message data] - * }; - * mq_gen(, mq_, mq_t, mq_msg_t, link) - * - * The API is as follows: - * - * bool mq_init(mq_t *mq); - * void mq_fini(mq_t *mq); - * unsigned mq_count(mq_t *mq); - * mq_msg_t *mq_tryget(mq_t *mq); - * mq_msg_t *mq_get(mq_t *mq); - * void mq_put(mq_t *mq, mq_msg_t *msg); - * - * The message queue linkage embedded in each message is to be treated as - * externally opaque (no need to initialize or clean up externally). mq_fini() - * does not perform any cleanup of messages, since it knows nothing of their - * payloads. - */ -#define mq_msg(a_mq_msg_type) ql_elm(a_mq_msg_type) - -#define mq_gen(a_attr, a_prefix, a_mq_type, a_mq_msg_type, a_field) \ -typedef struct { \ - mtx_t lock; \ - ql_head(a_mq_msg_type) msgs; \ - unsigned count; \ -} a_mq_type; \ -a_attr bool \ -a_prefix##init(a_mq_type *mq) { \ - \ - if (mtx_init(&mq->lock)) { \ - return true; \ - } \ - ql_new(&mq->msgs); \ - mq->count = 0; \ - return false; \ -} \ -a_attr void \ -a_prefix##fini(a_mq_type *mq) { \ - mtx_fini(&mq->lock); \ -} \ -a_attr unsigned \ -a_prefix##count(a_mq_type *mq) { \ - unsigned count; \ - \ - mtx_lock(&mq->lock); \ - count = mq->count; \ - mtx_unlock(&mq->lock); \ - return count; \ -} \ -a_attr a_mq_msg_type * \ -a_prefix##tryget(a_mq_type *mq) { \ - a_mq_msg_type *msg; \ - \ - mtx_lock(&mq->lock); \ - msg = ql_first(&mq->msgs); \ - if (msg != NULL) { \ - ql_head_remove(&mq->msgs, a_mq_msg_type, a_field); \ - mq->count--; \ - } \ - mtx_unlock(&mq->lock); \ - return msg; \ -} \ -a_attr a_mq_msg_type * \ -a_prefix##get(a_mq_type *mq) { \ - a_mq_msg_type *msg; \ - unsigned ns; \ - \ - msg = a_prefix##tryget(mq); \ - if (msg != NULL) { \ - return msg; \ - } \ - \ - ns = 1; \ - while (true) { \ - mq_nanosleep(ns); \ - msg = a_prefix##tryget(mq); \ - if (msg != NULL) { \ - return msg; \ - } \ - if (ns < 1000*1000*1000) { \ - /* Double sleep time, up to max 1 second. */ \ - ns <<= 1; \ - if (ns > 1000*1000*1000) { \ - ns = 1000*1000*1000; \ - } \ - } \ - } \ -} \ -a_attr void \ -a_prefix##put(a_mq_type *mq, a_mq_msg_type *msg) { \ - \ - mtx_lock(&mq->lock); \ - ql_elm_new(msg, a_field); \ - ql_tail_insert(&mq->msgs, msg, a_field); \ - mq->count++; \ - mtx_unlock(&mq->lock); \ -} |