void* mono_gc_alloc_mature (MonoVTable *vtable) { void **res; size_t size = ALIGN_UP (vtable->klass->instance_size); LOCK_GC; res = alloc_degraded (vtable, size, TRUE); UNLOCK_GC; if (G_UNLIKELY (vtable->klass->has_finalize)) mono_object_register_finalizer ((MonoObject*)res); return res; }
void mono_gc_finalize_threadpool_threads (void) { while (threads_to_finalize) { MonoInternalThread *thread = (MonoInternalThread*) mono_mlist_get_data (threads_to_finalize); /* Force finalization of the thread. */ thread->threadpool_thread = FALSE; mono_object_register_finalizer ((MonoObject*)thread); mono_gc_run_finalize (thread, NULL); threads_to_finalize = mono_mlist_next (threads_to_finalize); } }