void ponyint_messageq_destroy(messageq_t* q) { pony_msg_t* tail = q->tail; assert(((uintptr_t)q->head & ~(uintptr_t)1) == (uintptr_t)tail); ponyint_pool_free(tail->size, tail); q->head = NULL; q->tail = NULL; }
void ponyint_messageq_destroy(messageq_t* q) { pony_msg_t* tail = q->tail; assert((((uintptr_t)atomic_load_explicit(&q->head, memory_order_acquire) & ~(uintptr_t)1)) == (uintptr_t)tail); ponyint_pool_free(tail->index, tail); atomic_store_explicit(&q->head, NULL, memory_order_relaxed); q->tail = NULL; }
void ponyint_messageq_destroy(messageq_t* q) { pony_msg_t* tail = q->tail; pony_assert((((uintptr_t)atomic_load_explicit(&q->head, memory_order_relaxed) & ~(uintptr_t)1)) == (uintptr_t)tail); #ifdef USE_VALGRIND ANNOTATE_HAPPENS_BEFORE_FORGET_ALL(tail); #endif ponyint_pool_free(tail->index, tail); atomic_store_explicit(&q->head, NULL, memory_order_relaxed); q->tail = NULL; }
pony_msg_t* ponyint_messageq_pop(messageq_t* q) { pony_msg_t* tail = q->tail; pony_msg_t* next = _atomic_load(&tail->next); if(next != NULL) { q->tail = next; ponyint_pool_free(tail->size, tail); } return next; }
pony_msg_t* ponyint_messageq_pop(messageq_t* q) { pony_msg_t* tail = q->tail; pony_msg_t* next = atomic_load_explicit(&tail->next, memory_order_acquire); if(next != NULL) { q->tail = next; ponyint_pool_free(tail->index, tail); } return next; }
pony_msg_t* ponyint_messageq_pop(messageq_t* q) { pony_msg_t* tail = q->tail; pony_msg_t* next = atomic_load_explicit(&tail->next, memory_order_relaxed); if(next != NULL) { q->tail = next; atomic_thread_fence(memory_order_acquire); #ifdef USE_VALGRIND ANNOTATE_HAPPENS_AFTER(&tail->next); ANNOTATE_HAPPENS_BEFORE_FORGET_ALL(tail); #endif ponyint_pool_free(tail->index, tail); } return next; }