inline static int current_owner(NewGC *gc, Scheme_Custodian *c) { if (!scheme_current_thread) return 1; else if (!c) return thread_get_owner(scheme_current_thread); else return custodian_to_owner_set(gc, c); }
int BTC_single_allocation_limit(NewGC *gc, size_t sizeb) { /* We're allowed to fail. Check for allocations that exceed a single-time * limit. Otherwise, the limit doesn't work as intended, because * a program can allocate a large block that nearly exhausts memory, * and then a subsequent allocation can fail. As long as the limit * is much smaller than the actual available memory, and as long as * GC_out_of_memory protects any user-requested allocation whose size * is independent of any existing object, then we can enforce the limit. */ return (custodian_single_time_limit(gc, thread_get_owner(scheme_current_thread)) < sizeb); }