X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Futils%2Flock-free-queue.c;h=99cc8aaaf1622607d854923ca80a87e71218b663;hb=187bc41b1a52f333b5105ba1028e82559c90091b;hp=e50bcfc2eef9ee1e4758139cad46cf27b05fe963;hpb=5fd0ee87b8bdeefd1f49e7ef013311f41518a822;p=mono.git diff --git a/mono/utils/lock-free-queue.c b/mono/utils/lock-free-queue.c index e50bcfc2eef..99cc8aaaf16 100644 --- a/mono/utils/lock-free-queue.c +++ b/mono/utils/lock-free-queue.c @@ -47,18 +47,19 @@ */ #include +#ifdef HAVE_UNISTD_H #include -#include +#endif #include #include -#include +#include #include -#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) @@ -112,7 +113,7 @@ mono_lock_free_queue_enqueue (MonoLockFreeQueue *q, MonoLockFreeQueueNode *node) 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 @@ -156,7 +157,7 @@ mono_lock_free_queue_enqueue (MonoLockFreeQueue *q, MonoLockFreeQueueNode *node) 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 (); @@ -217,7 +218,7 @@ mono_lock_free_queue_dequeue (MonoLockFreeQueue *q) 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; @@ -285,7 +286,7 @@ mono_lock_free_queue_dequeue (MonoLockFreeQueue *q) g_assert (q->has_dummy); q->has_dummy = 0; mono_memory_write_barrier (); - mono_thread_hazardous_free_or_queue (head, free_dummy); + mono_thread_hazardous_free_or_queue (head, free_dummy, FALSE, TRUE); if (try_reenqueue_dummy (q)) goto retry; return NULL;