MonoObject* mono_gc_weak_link_get (void **link_addr) { MonoObject *obj = GC_call_with_alloc_lock (reveal_link, link_addr); if (obj == (MonoObject *) -1) return NULL; return obj; }
static void copy_weak_entry (scm_t_weak_entry *src, scm_t_weak_entry *dst) { struct weak_entry_data data; data.in = src; data.out = dst; GC_call_with_alloc_lock (do_copy_weak_entry, &data); }
char CORD_lf_func(size_t i, void * client_data) { register lf_state * state = (lf_state *)client_data; register cache_line * volatile * cl_addr = &(state -> lf_cache[DIV_LINE_SZ(MOD_CACHE_SZ(i))]); register cache_line * cl = (cache_line *)ATOMIC_READ(cl_addr); if (cl == 0 || cl -> tag != DIV_LINE_SZ(i)) { /* Cache miss */ refill_data rd; rd.state = state; rd.file_pos = i; rd.new_cache = GC_NEW_ATOMIC(cache_line); if (rd.new_cache == 0) OUT_OF_MEMORY; return((char)(GC_word) GC_call_with_alloc_lock((GC_fn_type) refill_cache, &rd)); } return(cl -> data[MOD_LINE_SZ(i)]); }
void* mono_gc_invoke_with_gc_lock (MonoGCLockedCallbackFunc func, void *data) { return GC_call_with_alloc_lock (func, data); }