X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fgc-internals.h;h=f71f0bc9f4a667052760a35b79296e6047badfd1;hb=cd1fb047330603d08d2882b0ac812d194cbea0c6;hp=52d950d8cca7b8469db99a3f95dcd751d6a24f4b;hpb=3e81958f1dd4cecb97167c5b3cb5541bda31c444;p=mono.git diff --git a/mono/metadata/gc-internals.h b/mono/metadata/gc-internals.h index 52d950d8cca..f71f0bc9f4a 100644 --- a/mono/metadata/gc-internals.h +++ b/mono/metadata/gc-internals.h @@ -16,7 +16,6 @@ #include #include #include -#include #define mono_domain_finalizers_lock(domain) mono_os_mutex_lock (&(domain)->finalizable_objects_hash_lock); #define mono_domain_finalizers_unlock(domain) mono_os_mutex_unlock (&(domain)->finalizable_objects_hash_lock); @@ -26,16 +25,6 @@ #define MONO_GC_UNREGISTER_ROOT(x) mono_gc_deregister_root ((char*)&(x)) -/* - * Register a memory location as a root pointing to memory allocated using - * mono_gc_alloc_fixed (). This includes MonoGHashTable. - */ -/* The result of alloc_fixed () is not GC tracked memory */ -#define MONO_GC_REGISTER_ROOT_FIXED(x,src,msg) do { \ - if (!mono_gc_is_moving ()) \ - MONO_GC_REGISTER_ROOT_PINNING ((x),(src),(msg)); \ - } while (0) - /* * Return a GC descriptor for an array containing N pointers to memory allocated * by mono_gc_alloc_fixed (). @@ -66,7 +55,7 @@ /* useful until we keep track of gc-references in corlib etc. */ #define IS_GC_REFERENCE(class,t) (mono_gc_is_moving () ? FALSE : ((t)->type == MONO_TYPE_U && (class)->image == mono_defaults.corlib)) -void mono_object_register_finalizer (MonoObject *obj, MonoError *error); +void mono_object_register_finalizer (MonoObject *obj); void ves_icall_System_GC_InternalCollect (int generation); gint64 ves_icall_System_GC_GetTotalMemory (MonoBoolean forceCollection); void ves_icall_System_GC_KeepAlive (MonoObject *obj); @@ -103,8 +92,6 @@ extern void mono_gc_set_stack_end (void *stack_end); gboolean mono_object_is_alive (MonoObject* obj); gboolean mono_gc_is_finalizer_thread (MonoThread *thread); gpointer mono_gc_out_of_memory (size_t size); -void mono_gc_enable_events (void); -void mono_gc_enable_alloc_events (void); void mono_gchandle_set_target (guint32 gchandle, MonoObject *obj); @@ -133,8 +120,6 @@ gboolean mono_gc_user_markers_supported (void); * The memory is non-moving and it will be explicitly deallocated. * size bytes will be available from the returned address (ie, descr * must not be stored in the returned memory) - * NOTE: Under Boehm, this returns memory allocated using GC_malloc, so the result should - * be stored into a location registered using MONO_GC_REGISTER_ROOT_FIXED (). */ void* mono_gc_alloc_fixed (size_t size, MonoGCDescriptor descr, MonoGCRootSource source, const char *msg); void mono_gc_free_fixed (void* addr); @@ -145,10 +130,6 @@ void mono_gchandle_free_domain (MonoDomain *domain); typedef void (*FinalizerThreadCallback) (gpointer user_data); -/* if there are finalizers to run, run them. Returns the number of finalizers run */ -gboolean mono_gc_pending_finalizers (void); -void mono_gc_finalize_notify (void); - void* mono_gc_alloc_pinned_obj (MonoVTable *vtable, size_t size); void* mono_gc_alloc_obj (MonoVTable *vtable, size_t size); void* mono_gc_alloc_vector (MonoVTable *vtable, size_t size, uintptr_t max_length); @@ -161,9 +142,11 @@ void mono_gc_register_for_finalization (MonoObject *obj, void *user_data); void mono_gc_add_memory_pressure (gint64 value); MONO_API int mono_gc_register_root (char *start, size_t size, MonoGCDescriptor descr, MonoGCRootSource source, const char *msg); void mono_gc_deregister_root (char* addr); -int mono_gc_finalizers_for_domain (MonoDomain *domain, MonoObject **out_array, int out_size); +void mono_gc_finalize_domain (MonoDomain *domain); void mono_gc_run_finalize (void *obj, void *data); void mono_gc_clear_domain (MonoDomain * domain); +/* Signal early termination of finalizer processing inside the gc */ +void mono_gc_suspend_finalizers (void); /* @@ -185,14 +168,19 @@ void mono_gc_wbarrier_set_root (gpointer ptr, MonoObject *value); mono_gc_wbarrier_set_root (&((s)->fieldname), (MonoObject*)value); \ } while (0) -void mono_gc_finalize_threadpool_threads (void); - /* fast allocation support */ +typedef enum { + // Regular fast path allocator. + MANAGED_ALLOCATOR_REGULAR, + // Managed allocator that just calls into the runtime. Used when allocation profiling w/ AOT. + MANAGED_ALLOCATOR_SLOW_PATH, +} ManagedAllocatorVariant; + int mono_gc_get_aligned_size_for_allocator (int size); MonoMethod* mono_gc_get_managed_allocator (MonoClass *klass, gboolean for_box, gboolean known_instance_size); MonoMethod* mono_gc_get_managed_array_allocator (MonoClass *klass); -MonoMethod *mono_gc_get_managed_allocator_by_type (int atype, gboolean slowpath); +MonoMethod *mono_gc_get_managed_allocator_by_type (int atype, ManagedAllocatorVariant variant); guint32 mono_gc_get_managed_allocator_types (void); @@ -294,8 +282,6 @@ gboolean mono_gc_card_table_nursery_check (void); void* mono_gc_get_nursery (int *shift_bits, size_t *size); -void mono_gc_set_current_thread_appdomain (MonoDomain *domain); - void mono_gc_set_skip_thread (gboolean skip); #ifndef HOST_WIN32 @@ -359,6 +345,8 @@ guint mono_gc_get_vtable_bits (MonoClass *klass); void mono_gc_register_altstack (gpointer stack, gint32 stack_size, gpointer altstack, gint32 altstack_size); +gboolean mono_gc_is_critical_method (MonoMethod *method); + /* If set, print debugging messages around finalizers. */ extern gboolean log_finalizers;