Exemple #1
0
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;
}
Exemple #2
0
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;
}
Exemple #3
0
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;
}
Exemple #4
0
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;
}
Exemple #5
0
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;
}
Exemple #6
0
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;
}