X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Futils%2Fmono-linked-list-set.c;h=95b3cad57b28cdc32a5e64d81293c91d98d592ce;hb=f392080f211ca2acc53f5cb1f616fd6a7c9699c9;hp=cc9c235b70fe5270d01cc9be982a326398037d42;hpb=73277ab4afd9821e52f44a938de18184ba4bf467;p=mono.git diff --git a/mono/utils/mono-linked-list-set.c b/mono/utils/mono-linked-list-set.c index cc9c235b70f..95b3cad57b2 100644 --- a/mono/utils/mono-linked-list-set.c +++ b/mono/utils/mono-linked-list-set.c @@ -16,8 +16,7 @@ #include -/*atomics.*/ -#include +#include static inline gpointer mask (gpointer n, uintptr_t bit) @@ -95,12 +94,12 @@ try_again: */ mono_hazard_pointer_set (hp, 2, prev); - cur = get_hazardous_pointer_with_mask ((gpointer*)prev, hp, 1); + cur = (MonoLinkedListSetNode *) get_hazardous_pointer_with_mask ((gpointer*)prev, hp, 1); while (1) { if (cur == NULL) return FALSE; - next = get_hazardous_pointer_with_mask ((gpointer*)&cur->next, hp, 0); + next = (MonoLinkedListSetNode *) get_hazardous_pointer_with_mask ((gpointer*)&cur->next, hp, 0); cur_key = cur->key; /* @@ -120,7 +119,7 @@ try_again: prev = &cur->next; mono_hazard_pointer_set (hp, 2, cur); } else { - next = mono_lls_pointer_unmask (next); + next = (MonoLinkedListSetNode *) mono_lls_pointer_unmask (next); if (InterlockedCompareExchangePointer ((volatile gpointer*)prev, next, cur) == cur) { /* The hazard pointer must be cleared after the CAS. */ mono_memory_write_barrier (); @@ -130,7 +129,7 @@ try_again: } else goto try_again; } - cur = mono_lls_pointer_unmask (next); + cur = (MonoLinkedListSetNode *) mono_lls_pointer_unmask (next); mono_hazard_pointer_set (hp, 1, cur); } } @@ -153,8 +152,8 @@ mono_lls_insert (MonoLinkedListSet *list, MonoThreadHazardPointers *hp, MonoLink while (1) { if (mono_lls_find (list, hp, value->key)) return FALSE; - cur = mono_hazard_pointer_get_val (hp, 1); - prev = mono_hazard_pointer_get_val (hp, 2); + cur = (MonoLinkedListSetNode *) mono_hazard_pointer_get_val (hp, 1); + prev = (MonoLinkedListSetNode **) mono_hazard_pointer_get_val (hp, 2); value->next = cur; mono_hazard_pointer_set (hp, 0, value); @@ -179,9 +178,9 @@ mono_lls_remove (MonoLinkedListSet *list, MonoThreadHazardPointers *hp, MonoLink if (!mono_lls_find (list, hp, value->key)) return FALSE; - next = mono_hazard_pointer_get_val (hp, 0); - cur = mono_hazard_pointer_get_val (hp, 1); - prev = mono_hazard_pointer_get_val (hp, 2); + next = (MonoLinkedListSetNode *) mono_hazard_pointer_get_val (hp, 0); + cur = (MonoLinkedListSetNode *) mono_hazard_pointer_get_val (hp, 1); + prev = (MonoLinkedListSetNode **) mono_hazard_pointer_get_val (hp, 2); g_assert (cur == value); @@ -189,7 +188,7 @@ mono_lls_remove (MonoLinkedListSet *list, MonoThreadHazardPointers *hp, MonoLink continue; /* The second CAS must happen before the first. */ mono_memory_write_barrier (); - if (InterlockedCompareExchangePointer ((volatile gpointer*)prev, next, cur) == cur) { + if (InterlockedCompareExchangePointer ((volatile gpointer*)prev, mono_lls_pointer_unmask (next), cur) == cur) { /* The CAS must happen before the hazard pointer clear. */ mono_memory_write_barrier (); mono_hazard_pointer_clear (hp, 1);