#include <mono/utils/lock-free-queue.h>
-#define INVALID_NEXT ((void*)-1)
-#define END_MARKER ((void*)-2)
-#define FREE_NEXT ((void*)-3)
+#define INVALID_NEXT ((MonoLockFreeQueueNode *volatile)-1)
+#define END_MARKER ((MonoLockFreeQueueNode *volatile)-2)
+#define FREE_NEXT ((MonoLockFreeQueueNode *volatile)-3)
void
mono_lock_free_queue_init (MonoLockFreeQueue *q)
for (;;) {
MonoLockFreeQueueNode *next;
- tail = get_hazardous_pointer ((gpointer volatile*)&q->tail, hp, 0);
+ tail = (MonoLockFreeQueueNode *) get_hazardous_pointer ((gpointer volatile*)&q->tail, hp, 0);
mono_memory_read_barrier ();
/*
* We never dereference next so we don't need a
static void
free_dummy (gpointer _dummy)
{
- MonoLockFreeQueueDummy *dummy = _dummy;
+ MonoLockFreeQueueDummy *dummy = (MonoLockFreeQueueDummy *) _dummy;
mono_lock_free_queue_node_free (&dummy->node);
g_assert (dummy->in_use);
mono_memory_write_barrier ();
for (;;) {
MonoLockFreeQueueNode *tail, *next;
- head = get_hazardous_pointer ((gpointer volatile*)&q->head, hp, 0);
+ head = (MonoLockFreeQueueNode *) get_hazardous_pointer ((gpointer volatile*)&q->head, hp, 0);
tail = (MonoLockFreeQueueNode*)q->tail;
mono_memory_read_barrier ();
next = head->next;
g_assert (q->has_dummy);
q->has_dummy = 0;
mono_memory_write_barrier ();
- mono_thread_hazardous_free_or_queue (head, free_dummy, FALSE, TRUE);
+ mono_thread_hazardous_free_or_queue (head, free_dummy, HAZARD_FREE_NO_LOCK, HAZARD_FREE_ASYNC_CTX);
if (try_reenqueue_dummy (q))
goto retry;
return NULL;