if (!cq)
return;
- mono_gc_bzero (cq, sizeof (MonoCQ));
+ mono_gc_bzero_aligned (cq, sizeof (MonoCQ));
MONO_GC_UNREGISTER_ROOT (cq->tail);
MONO_GC_UNREGISTER_ROOT (cq->head);
g_free (cq);
}
if (InterlockedCompareExchange (&queue->last, pos + 1, pos) == pos) {
- mono_array_setref (queue->array, pos, obj);
+ mono_array_setref_fast (queue->array, pos, obj);
STORE_STORE_FENCE;
- mono_array_set (queue->array_state, char, pos, TRUE);
+ mono_array_set_fast (queue->array_state, char, pos, TRUE);
if ((pos + 1) == CQ_ARRAY_SIZE) {
CQ_DEBUG ("enqueue(): pos + 1 == CQ_ARRAY_SIZE, %d. Adding node.", CQ_ARRAY_SIZE);
mono_cq_add_node (cq);
while (old_head->next == NULL)
SleepEx (0, FALSE);
cq->head = old_head->next;
+
+ MONO_OBJECT_SETREF (old_head, next, NULL);
old_head = NULL;
}