X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fmono-gc.h;h=24ffda7730a2ecb67c1a158f542a768e6eead89d;hb=bc9d5d113ab7064fc199a2f430751643466cb477;hp=6a7dea12c055c8dce2e1be20981c732a1376b2e1;hpb=4eb352bcb3ef7a71dc9ab62c5cd2d5e7598619f7;p=mono.git diff --git a/mono/metadata/mono-gc.h b/mono/metadata/mono-gc.h index 6a7dea12c05..24ffda7730a 100644 --- a/mono/metadata/mono-gc.h +++ b/mono/metadata/mono-gc.h @@ -7,16 +7,52 @@ #include -G_BEGIN_DECLS +MONO_BEGIN_DECLS -void mono_gc_collect (int generation); -int mono_gc_max_generation (void); -int mono_gc_get_generation (MonoObject *object); -int mono_gc_collection_count (int generation); -gint64 mono_gc_get_used_size (void); -gint64 mono_gc_get_heap_size (void); +typedef int (*MonoGCReferences) (MonoObject *obj, MonoClass *klass, uintptr_t size, uintptr_t num, MonoObject **refs, uintptr_t *offsets, void *data); -G_END_DECLS +typedef enum { + // Roots external to Mono. Embedders may only use this value. + MONO_ROOT_SOURCE_EXTERNAL = 0, + // Thread stack. Must not be used to register roots. + MONO_ROOT_SOURCE_STACK = 1, + // Roots in the finalizer queue. Must not be used to register roots. + MONO_ROOT_SOURCE_FINALIZER_QUEUE = 2, + // Managed static variables. + MONO_ROOT_SOURCE_STATIC = 3, + // Static variables with ThreadStaticAttribute. + MONO_ROOT_SOURCE_THREAD_STATIC = 4, + // Static variables with ContextStaticAttribute. + MONO_ROOT_SOURCE_CONTEXT_STATIC = 5, + // GCHandle structures. + MONO_ROOT_SOURCE_GC_HANDLE = 6, + // Roots in the just-in-time compiler. + MONO_ROOT_SOURCE_JIT = 7, + // Roots in the threading subsystem. + MONO_ROOT_SOURCE_THREADING = 8, + // Roots in application domains. + MONO_ROOT_SOURCE_DOMAIN = 9, + // Roots in reflection code. + MONO_ROOT_SOURCE_REFLECTION = 10, + // Roots from P/Invoke or other marshaling. + MONO_ROOT_SOURCE_MARSHAL = 11, + // Roots in the thread pool data structures. + MONO_ROOT_SOURCE_THREAD_POOL = 12, + // Roots in the debugger agent. + MONO_ROOT_SOURCE_DEBUGGER = 13, +} MonoGCRootSource; + +MONO_API void mono_gc_collect (int generation); +MONO_API int mono_gc_max_generation (void); +MONO_API int mono_gc_get_generation (MonoObject *object); +MONO_API int mono_gc_collection_count (int generation); +MONO_API int64_t mono_gc_get_used_size (void); +MONO_API int64_t mono_gc_get_heap_size (void); +MONO_API int mono_gc_invoke_finalizers (void); +/* heap walking is only valid in the pre-stop-world event callback */ +MONO_API int mono_gc_walk_heap (int flags, MonoGCReferences callback, void *data); + +MONO_END_DECLS #endif /* __METADATA_MONO_GC_H__ */