/** * mono_gc_toggleref_add: * @object object to register for toggleref processing * @strong_ref if true the object is registered with a strong ref, a weak one otherwise * * Register a given object for toggleref processing. It will be stored internally and the toggleref callback will be called * on it until it returns MONO_TOGGLE_REF_DROP or is collected. */ void mono_gc_toggleref_add (MonoObject *object, mono_bool strong_ref) { if (!toggleref_callback) return; SGEN_LOG (4, "Adding toggleref %p %d", object, strong_ref); sgen_gc_lock (); ensure_toggleref_capacity (1); toggleref_array [toggleref_array_size].strong_ref = strong_ref ? object : NULL; toggleref_array [toggleref_array_size].weak_ref = strong_ref ? NULL : object; ++toggleref_array_size; sgen_gc_unlock (); }
/** * mono_gc_toggleref_add: * @object object to register for toggleref processing * @strong_ref if true the object is registered with a strong ref, a weak one otherwise * * Register a given object for toggleref processing. It will be stored internally and the toggleref callback will be called * on it until it returns MONO_TOGGLE_REF_DROP or is collected. */ void mono_gc_toggleref_add (MonoObject *object, mono_bool strong_ref) { if (!toggleref_callback) return; DEBUG (4, fprintf (gc_debug_file, "Adding toggleref %p %d\n", object, strong_ref)); sgen_gc_lock (); ensure_toggleref_capacity (1); toggleref_array [toggleref_array_size].strong_ref = strong_ref ? object : NULL; toggleref_array [toggleref_array_size].weak_ref = strong_ref ? NULL : object; ++toggleref_array_size; sgen_gc_unlock (); }
GC_API int GC_CALL GC_toggleref_add(void *obj, int is_strong_ref) { int res = GC_SUCCESS; DCL_LOCK_STATE; GC_ASSERT(obj != NULL); LOCK(); if (GC_toggleref_callback != 0) { if (!ensure_toggleref_capacity(1)) { res = GC_NO_MEMORY; } else { GC_toggleref_arr[GC_toggleref_array_size++].strong_ref = is_strong_ref ? obj : (void *)GC_HIDE_POINTER(obj); } } UNLOCK(); return res; }