X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Futils%2Fhazard-pointer.h;h=3cb2c0aeba33817f0aad3b33bdb9c906913e6fb9;hb=58e8a9f85176c9607e605b888ef45db01a0f6997;hp=1e49bc1770ab40926a1aa53cebd9da08cdddfb7f;hpb=811674bc6331c98d33134e2a37a7c7dd66402227;p=mono.git diff --git a/mono/utils/hazard-pointer.h b/mono/utils/hazard-pointer.h index 1e49bc1770a..3cb2c0aeba3 100644 --- a/mono/utils/hazard-pointer.h +++ b/mono/utils/hazard-pointer.h @@ -2,6 +2,7 @@ * hazard-pointer.h: Hazard pointer related code. * * (C) Copyright 2011 Novell, Inc + * Licensed under the MIT license. See LICENSE file in the project root for full license information. */ #ifndef __MONO_HAZARD_POINTER_H__ #define __MONO_HAZARD_POINTER_H__ @@ -18,8 +19,19 @@ typedef struct { typedef void (*MonoHazardousFreeFunc) (gpointer p); -void mono_thread_hazardous_free_or_queue (gpointer p, MonoHazardousFreeFunc free_func, - gboolean free_func_might_lock, gboolean lock_free_context); +typedef enum { + HAZARD_FREE_MAY_LOCK, + HAZARD_FREE_NO_LOCK, +} HazardFreeLocking; + +typedef enum { + HAZARD_FREE_SAFE_CTX, + HAZARD_FREE_ASYNC_CTX, +} HazardFreeContext; + +gboolean mono_thread_hazardous_try_free (gpointer p, MonoHazardousFreeFunc free_func); +void mono_thread_hazardous_queue_free (gpointer p, MonoHazardousFreeFunc free_func); + void mono_thread_hazardous_try_free_all (void); void mono_thread_hazardous_try_free_some (void); MonoThreadHazardPointers* mono_hazard_pointer_get (void); @@ -36,6 +48,7 @@ gpointer get_hazardous_pointer (gpointer volatile *pp, MonoThreadHazardPointers #define mono_hazard_pointer_clear(hp,i) \ do { g_assert ((i) >= 0 && (i) < HAZARD_POINTER_COUNT); \ + mono_memory_write_barrier (); \ (hp)->hazard_pointers [(i)] = NULL; \ } while (0) @@ -46,6 +59,9 @@ int mono_thread_small_id_alloc (void); int mono_hazard_pointer_save_for_signal_handler (void); void mono_hazard_pointer_restore_for_signal_handler (int small_id); +typedef void (*MonoHazardFreeQueueSizeCallback)(size_t size); +void mono_hazard_pointer_install_free_queue_size_callback (MonoHazardFreeQueueSizeCallback cb); + void mono_thread_smr_init (void); void mono_thread_smr_cleanup (void); #endif /*__MONO_HAZARD_POINTER_H__*/