X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fsgen%2Fsgen-array-list.c;h=0247a6b12695c3e1368d327fefd5f58dd31fd2da;hb=565d626c051d4a2a93ae9501a24706dbd90f227b;hp=09ac01dfd5e8ee88f365d618b551d1b9a84c5be4;hpb=fee5ece80556eb45d16da5f6c0fde991e5af1d40;p=mono.git diff --git a/mono/sgen/sgen-array-list.c b/mono/sgen/sgen-array-list.c index 09ac01dfd5e..0247a6b1269 100644 --- a/mono/sgen/sgen-array-list.c +++ b/mono/sgen/sgen-array-list.c @@ -1,5 +1,6 @@ -/* - * sgen-array-list.c: A pointer array list that doesn't require reallocs +/** + * \file + * A pointer array list that doesn't require reallocs * * Copyright (C) 2016 Xamarin Inc * @@ -176,24 +177,6 @@ retry: return index; } -/* - * Removes all NULL pointers from the array. Not thread safe - */ -void -sgen_array_list_remove_nulls (SgenArrayList *array) -{ - guint32 start = 0; - volatile gpointer *slot; - - SGEN_ARRAY_LIST_FOREACH_SLOT (array, slot) { - if (*slot) - *sgen_array_list_get_slot (array, start++) = *slot; - } SGEN_ARRAY_LIST_END_FOREACH_SLOT; - - mono_memory_write_barrier (); - array->next_slot = start; -} - /* * Does a linear search through the pointer array to find `ptr`. Returns the index if * found, otherwise (guint32)-1. @@ -210,4 +193,18 @@ sgen_array_list_find (SgenArrayList *array, gpointer ptr) return (guint32)-1; } +gboolean +sgen_array_list_default_cas_setter (volatile gpointer *slot, gpointer ptr, int data) +{ + if (InterlockedCompareExchangePointer (slot, ptr, NULL) == NULL) + return TRUE; + return FALSE; +} + +gboolean +sgen_array_list_default_is_slot_set (volatile gpointer *slot) +{ + return *slot != NULL; +} + #endif