version 1.1, 1999/12/03 07:39:10 |
version 1.2, 2000/12/01 09:26:11 |
Line 134 void GC_incr_mem_freed(size_t n) |
|
Line 134 void GC_incr_mem_freed(size_t n) |
|
|
|
/* Analogous to the above, but assumes a small object size, and */ |
/* Analogous to the above, but assumes a small object size, and */ |
/* bypasses MERGE_SIZES mechanism. Used by gc_inline.h. */ |
/* bypasses MERGE_SIZES mechanism. Used by gc_inline.h. */ |
#ifdef __STDC__ |
ptr_t GC_generic_malloc_words_small_inner(lw, k) |
ptr_t GC_generic_malloc_words_small(size_t lw, int k) |
register word lw; |
#else |
register int k; |
ptr_t GC_generic_malloc_words_small(lw, k) |
|
register word lw; |
|
register int k; |
|
#endif |
|
{ |
{ |
register ptr_t op; |
register ptr_t op; |
register ptr_t *opp; |
register ptr_t *opp; |
register struct obj_kind * kind = GC_obj_kinds + k; |
register struct obj_kind * kind = GC_obj_kinds + k; |
DCL_LOCK_STATE; |
|
|
|
GC_INVOKE_FINALIZERS(); |
|
DISABLE_SIGNALS(); |
|
LOCK(); |
|
opp = &(kind -> ok_freelist[lw]); |
opp = &(kind -> ok_freelist[lw]); |
if( (op = *opp) == 0 ) { |
if( (op = *opp) == 0 ) { |
if (!GC_is_initialized) { |
if (!GC_is_initialized) { |
|
|
*opp = obj_link(op); |
*opp = obj_link(op); |
obj_link(op) = 0; |
obj_link(op) = 0; |
GC_words_allocd += lw; |
GC_words_allocd += lw; |
|
return((ptr_t)op); |
|
} |
|
|
|
/* Analogous to the above, but assumes a small object size, and */ |
|
/* bypasses MERGE_SIZES mechanism. Used by gc_inline.h. */ |
|
#ifdef __STDC__ |
|
ptr_t GC_generic_malloc_words_small(size_t lw, int k) |
|
#else |
|
ptr_t GC_generic_malloc_words_small(lw, k) |
|
register word lw; |
|
register int k; |
|
#endif |
|
{ |
|
register ptr_t op; |
|
DCL_LOCK_STATE; |
|
|
|
GC_INVOKE_FINALIZERS(); |
|
DISABLE_SIGNALS(); |
|
LOCK(); |
|
op = GC_generic_malloc_words_small_inner(lw, k); |
UNLOCK(); |
UNLOCK(); |
ENABLE_SIGNALS(); |
ENABLE_SIGNALS(); |
return((ptr_t)op); |
return((ptr_t)op); |