X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Futils%2Fmono-linked-list-set.h;h=bb25cb1c18e83055981fb35d944af508d2705e91;hb=b9e7bcabe48cd0d9f282a2eebe6ab9a8a010d9b0;hp=6e0d6296fd6b53a04ba05727240d196daab5fb08;hpb=ff49850dfc18f5991246a203184fa1e0b8a7c7ab;p=mono.git diff --git a/mono/utils/mono-linked-list-set.h b/mono/utils/mono-linked-list-set.h index 6e0d6296fd6..bb25cb1c18e 100644 --- a/mono/utils/mono-linked-list-set.h +++ b/mono/utils/mono-linked-list-set.h @@ -1,5 +1,6 @@ -/* - * mono-linked-list-set.h: A lock-free split ordered list. +/** + * \file + * A lock-free split ordered list. * * Author: * Rodrigo Kumpera (kumpera@gmail.com) @@ -24,7 +25,6 @@ struct _MonoLinkedListSetNode { typedef struct { MonoLinkedListSetNode *head; void (*free_node_func)(void *); - HazardFreeLocking locking; } MonoLinkedListSet; @@ -45,20 +45,20 @@ Those are low level operations. prev, cur, next are returned in the hazard point You must manually clean the hazard pointer table after using them. */ -void -mono_lls_init (MonoLinkedListSet *list, void (*free_node_func)(void *), HazardFreeLocking free_node_func_locking); +MONO_API void +mono_lls_init (MonoLinkedListSet *list, void (*free_node_func)(void *)); -gboolean -mono_lls_find (MonoLinkedListSet *list, MonoThreadHazardPointers *hp, uintptr_t key, HazardFreeContext context); +MONO_API gboolean +mono_lls_find (MonoLinkedListSet *list, MonoThreadHazardPointers *hp, uintptr_t key); -gboolean -mono_lls_insert (MonoLinkedListSet *list, MonoThreadHazardPointers *hp, MonoLinkedListSetNode *value, HazardFreeContext context); +MONO_API gboolean +mono_lls_insert (MonoLinkedListSet *list, MonoThreadHazardPointers *hp, MonoLinkedListSetNode *value); -gboolean -mono_lls_remove (MonoLinkedListSet *list, MonoThreadHazardPointers *hp, MonoLinkedListSetNode *value, HazardFreeContext context); +MONO_API gboolean +mono_lls_remove (MonoLinkedListSet *list, MonoThreadHazardPointers *hp, MonoLinkedListSetNode *value); -gpointer -get_hazardous_pointer_with_mask (gpointer volatile *pp, MonoThreadHazardPointers *hp, int hazard_index); +MONO_API gpointer +mono_lls_get_hazardous_pointer_with_mask (gpointer volatile *pp, MonoThreadHazardPointers *hp, int hazard_index); static inline gboolean mono_lls_filter_accept_all (gpointer elem) @@ -108,12 +108,12 @@ mono_lls_filter_accept_all (gpointer elem) restart__ = FALSE; \ MonoLinkedListSetNode **prev__ = &list__->head; \ mono_hazard_pointer_set (hp__, 2, prev__); \ - MonoLinkedListSetNode *cur__ = (MonoLinkedListSetNode *) get_hazardous_pointer_with_mask ((gpointer *) prev__, hp__, 1); \ + MonoLinkedListSetNode *cur__ = (MonoLinkedListSetNode *) mono_lls_get_hazardous_pointer_with_mask ((gpointer *) prev__, hp__, 1); \ while (1) { \ if (!cur__) { \ break; \ } \ - MonoLinkedListSetNode *next__ = (MonoLinkedListSetNode *) get_hazardous_pointer_with_mask ((gpointer *) &cur__->next, hp__, 0); \ + MonoLinkedListSetNode *next__ = (MonoLinkedListSetNode *) mono_lls_get_hazardous_pointer_with_mask ((gpointer *) &cur__->next, hp__, 0); \ uintptr_t ckey__ = cur__->key; \ mono_memory_read_barrier (); \ if (*prev__ != cur__) { \ @@ -152,7 +152,7 @@ mono_lls_filter_accept_all (gpointer elem) mono_memory_write_barrier (); \ mono_hazard_pointer_clear (hp__, 1); \ if (list__->free_node_func) { \ - mono_thread_hazardous_free_or_queue (cur__, list__->free_node_func, list__->locking, HAZARD_FREE_ASYNC_CTX); \ + mono_thread_hazardous_queue_free (cur__, list__->free_node_func); \ } \ } else { \ restart__ = TRUE; \