diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/deque.c | 11 | ||||
| -rw-r--r-- | src/deque.h | 2 |
2 files changed, 6 insertions, 7 deletions
diff --git a/src/deque.c b/src/deque.c index 35f1907..9b63b55 100644 --- a/src/deque.c +++ b/src/deque.c @@ -37,11 +37,12 @@ void *ez_deque_pop(ez_deque_t *q) { return (u8*)q + pop_pos; } -ts_deque_t ts_deque_create(ez_deque_t *q) { - pthread_mutex_t *m = malloc(sizeof(pthread_mutex_t)); - *m = (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER; +// Sync constructs are allocated on arena +ts_deque_t ts_deque_create(smrt_arena_t *arena, ez_deque_t *q) { + pthread_mutex_t *m = smrt_arena_push(arena, sizeof(pthread_mutex_t), true); + pthread_mutex_init(m, NULL); - sem_t *s = malloc(sizeof(sem_t)); + sem_t *s = smrt_arena_push(arena, sizeof(sem_t), true); sem_init(s, 0, 0); return (ts_deque_t){ @@ -53,9 +54,7 @@ ts_deque_t ts_deque_create(ez_deque_t *q) { void ts_deque_destroy(ts_deque_t tsq) { sem_destroy(tsq.count_sem); - free(tsq.count_sem); pthread_mutex_destroy(tsq.write_lock); - free(tsq.write_lock); } b32 ts_deque_enqueue(ts_deque_t tsq, void *elem) { diff --git a/src/deque.h b/src/deque.h index e254bfb..65b1ca8 100644 --- a/src/deque.h +++ b/src/deque.h @@ -34,7 +34,7 @@ pthread_mutex_t *write_lock; sem_t * count_sem; } ts_deque_t; -ts_deque_t ts_deque_create(ez_deque_t * q); +ts_deque_t ts_deque_create(smrt_arena_t *arena, ez_deque_t * q); void ts_deque_destroy(ts_deque_t tsq); // Deal with re-enqueueing yourself |