Merge pull request #498 from Unroll-Me/master
[mono.git] / mono / utils / lock-free-queue.h
index 7a494729ef38afb3c0b6c0b8f65d986e35310b5c..32fec4cad3deffd448c6fb00236bd10c0002113b 100644 (file)
@@ -35,7 +35,7 @@
 typedef struct _MonoLockFreeQueueNode MonoLockFreeQueueNode;
 
 struct _MonoLockFreeQueueNode {
-       MonoLockFreeQueueNode *next;
+       MonoLockFreeQueueNode * volatile next;
 #ifdef QUEUE_DEBUG
        gint32 in_queue;
 #endif
@@ -43,16 +43,16 @@ struct _MonoLockFreeQueueNode {
 
 typedef struct {
        MonoLockFreeQueueNode node;
-       gint32 in_use;
+       volatile gint32 in_use;
 } MonoLockFreeQueueDummy;
 
 #define MONO_LOCK_FREE_QUEUE_NUM_DUMMIES       2
 
 typedef struct {
-       volatile MonoLockFreeQueueNode *head;
-       volatile MonoLockFreeQueueNode *tail;
+       MonoLockFreeQueueNode * volatile head;
+       MonoLockFreeQueueNode * volatile tail;
        MonoLockFreeQueueDummy dummies [MONO_LOCK_FREE_QUEUE_NUM_DUMMIES];
-       gint32 has_dummy;
+       volatile gint32 has_dummy;
 } MonoLockFreeQueue;
 
 void mono_lock_free_queue_init (MonoLockFreeQueue *q) MONO_INTERNAL;