gc.c File Reference

#include "ruby/ruby.h"
#include "ruby/st.h"
#include "ruby/re.h"
#include "ruby/io.h"
#include "ruby/util.h"
#include "eval_intern.h"
#include "vm_core.h"
#include "internal.h"
#include "gc.h"
#include "constant.h"
#include "ruby_atomic.h"
#include <stdio.h>
#include <setjmp.h>
#include <sys/types.h>
#include <assert.h>

Go to the source code of this file.

Data Structures

struct  ruby_gc_params_t
struct  gc_profile_record
struct  RVALUE
struct  heaps_slot
struct  sorted_heaps_slot
struct  gc_list
struct  stack_chunk
struct  mark_stack
struct  rb_objspace
struct  mark_tbl_arg
struct  each_obj_args
struct  os_each_struct
struct  force_finalize_list

Defines

#define VALGRIND_MAKE_MEM_DEFINED(p, n)
#define VALGRIND_MAKE_MEM_UNDEFINED(p, n)
#define rb_setjmp(env)   RUBY_SETJMP(env)
#define rb_jmp_buf   rb_jmpbuf_t
#define GC_MALLOC_LIMIT   8000000
#define HEAP_MIN_SLOTS   10000
#define FREE_MIN   4096
#define nomem_error   GET_VM()->special_exceptions[ruby_error_nomemory]
#define nonspecial_obj_id(obj)   (VALUE)((SIGNED_VALUE)(obj)|FIXNUM_FLAG)
#define obj_id_to_ref(objid)   ((objid) ^ FIXNUM_FLAG)
#define GC_PROFILE_MORE_DETAIL   0
#define GC_PROF_TIMER_START
#define GC_PROF_TIMER_STOP(marked)
#define INIT_GC_PROF_PARAMS
#define GC_PROF_MARK_TIMER_START
#define GC_PROF_MARK_TIMER_STOP
#define GC_PROF_SWEEP_TIMER_START
#define GC_PROF_SWEEP_TIMER_STOP
#define GC_PROF_SET_MALLOC_INFO
#define GC_PROF_SET_HEAP_INFO(record)
#define GC_PROF_INC_LIVE_NUM
#define GC_PROF_DEC_LIVE_NUM
#define STACK_CHUNK_SIZE   500
#define CALC_EXACT_MALLOC_SIZE   0
#define malloc_limit   objspace->malloc_params.limit
#define malloc_increase   objspace->malloc_params.increase
#define heaps   objspace->heap.ptr
#define heaps_length   objspace->heap.length
#define heaps_used   objspace->heap.used
#define freelist   objspace->heap.freelist
#define lomem   objspace->heap.range[0]
#define himem   objspace->heap.range[1]
#define heaps_inc   objspace->heap.increment
#define heaps_freed   objspace->heap.freed
#define dont_gc   objspace->flags.dont_gc
#define during_gc   objspace->flags.during_gc
#define finalizer_table   objspace->final.table
#define deferred_final_list   objspace->final.deferred
#define global_List   objspace->global_list
#define ruby_gc_stress   objspace->gc_stress
#define initial_malloc_limit   initial_params.initial_malloc_limit
#define initial_heap_min_slots   initial_params.initial_heap_min_slots
#define initial_free_min   initial_params.initial_free_min
#define HEAP_SIZE   0x4000
#define HEAP_OBJ_LIMIT   (unsigned int)(HEAP_SIZE / sizeof(struct RVALUE))
#define TRY_WITH_GC(alloc)
#define RANY(o)   ((RVALUE*)(o))
#define SET_STACK_END   SET_MACHINE_STACK_END(&th->machine_stack_end)
#define STACK_START   (th->machine_stack_start)
#define STACK_END   (th->machine_stack_end)
#define STACK_LEVEL_MAX   (th->machine_stack_maxsize/sizeof(VALUE))
#define STACK_LENGTH
#define STACKFRAME_FOR_CALL_CFUNC   512
#define MARK_STACK_EMPTY   (mark_stack_ptr == mark_stack)
#define rb_gc_mark_locations(start, end)   gc_mark_locations(objspace, (start), (end))
#define STR_ASSOC   FL_USER3
#define GC_NOTIFY   0
#define GET_STACK_BOUNDS(start, end, appendix)
#define numberof(array)   (int)(sizeof(array) / sizeof((array)[0]))
#define NUM2PTR(x)   NUM2ULONG(x)
#define COUNT_TYPE(t)   case (t): type = ID2SYM(rb_intern(#t)); break;

Typedefs

typedef struct stack_chunk stack_chunk_t
typedef struct mark_stack mark_stack_t
typedef struct rb_objspace rb_objspace_t
typedef int each_obj_callback (void *, void *, size_t, void *)

Functions

void * alloca ()
static double getrusage_time (void)
static void rb_objspace_call_finalizer (rb_objspace_t *objspace)
static void initial_expand_heap (rb_objspace_t *objspace)
static void init_mark_stack (mark_stack_t *stack)
void rb_gc_set_params (void)
static void run_final (rb_objspace_t *objspace, VALUE obj)
static int garbage_collect (rb_objspace_t *objspace)
static int gc_lazy_sweep (rb_objspace_t *objspace)
void rb_global_variable (VALUE *var)
static void * ruby_memerror_body (void *dummy)
static void ruby_memerror (void)
void rb_memerror (void)
static VALUE gc_stress_get (VALUE self)
static VALUE gc_stress_set (VALUE self, VALUE flag)
static VALUE gc_profile_enable_get (VALUE self)
static VALUE gc_profile_enable (void)
static VALUE gc_profile_disable (void)
static VALUE gc_profile_clear (void)
static void * negative_size_allocation_error_with_gvl (void *ptr)
static void negative_size_allocation_error (const char *msg)
static void * gc_with_gvl (void *ptr)
static int garbage_collect_with_gvl (rb_objspace_t *objspace)
static void vm_xfree (rb_objspace_t *objspace, void *ptr)
static size_t vm_malloc_prepare (rb_objspace_t *objspace, size_t size)
static void * vm_malloc_fixup (rb_objspace_t *objspace, void *mem, size_t size)
static void * vm_xmalloc (rb_objspace_t *objspace, size_t size)
static void * vm_xrealloc (rb_objspace_t *objspace, void *ptr, size_t size)
void * ruby_xmalloc (size_t size)
static size_t xmalloc2_size (size_t n, size_t size)
void * ruby_xmalloc2 (size_t n, size_t size)
static void * vm_xcalloc (rb_objspace_t *objspace, size_t count, size_t elsize)
void * ruby_xcalloc (size_t n, size_t size)
void * ruby_xrealloc (void *ptr, size_t size)
void * ruby_xrealloc2 (void *ptr, size_t n, size_t size)
void ruby_xfree (void *x)
VALUE rb_gc_enable (void)
VALUE rb_gc_disable (void)
void rb_gc_register_mark_object (VALUE obj)
void rb_gc_register_address (VALUE *addr)
void rb_gc_unregister_address (VALUE *addr)
static void allocate_sorted_heaps (rb_objspace_t *objspace, size_t next_heaps_length)
static void assign_heap_slot (rb_objspace_t *objspace)
static void add_heap_slots (rb_objspace_t *objspace, size_t add)
static void init_heap (rb_objspace_t *objspace)
static void set_heaps_increment (rb_objspace_t *objspace)
static int heaps_increment (rb_objspace_t *objspace)
int rb_during_gc (void)
VALUE rb_newobj (void)
NODE * rb_node_newnode (enum node_type type, VALUE a0, VALUE a1, VALUE a2)
VALUE rb_data_object_alloc (VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree)
VALUE rb_data_typed_object_alloc (VALUE klass, void *datap, const rb_data_type_t *type)
size_t rb_objspace_data_type_memsize (VALUE obj)
const char * rb_objspace_data_type_name (VALUE obj)
int ruby_get_stack_grow_direction (volatile VALUE *addr)
static void push_mark_stack (mark_stack_t *, VALUE)
static int pop_mark_stack (mark_stack_t *, VALUE *)
static void shrink_stack_chunk_cache (mark_stack_t *stack)
static stack_chunk_tstack_chunk_alloc (void)
static int is_mark_stask_empty (mark_stack_t *stack)
static void add_stack_chunk_cache (mark_stack_t *stack, stack_chunk_t *chunk)
static void push_mark_stack_chunk (mark_stack_t *stack)
static void pop_mark_stack_chunk (mark_stack_t *stack)
size_t ruby_stack_length (VALUE **p)
static int stack_check (int water_mark)
int ruby_stack_check (void)
static void gc_mark (rb_objspace_t *objspace, VALUE ptr)
static void gc_mark_children (rb_objspace_t *objspace, VALUE ptr)
static void gc_mark_stacked_objects (rb_objspace_t *objspace)
static int is_pointer_to_heap (rb_objspace_t *objspace, void *ptr)
static void mark_locations_array (rb_objspace_t *objspace, register VALUE *x, register long n)
static void gc_mark_locations (rb_objspace_t *objspace, VALUE *start, VALUE *end)
void rb_gc_mark_locations (VALUE *start, VALUE *end)
static int mark_entry (ID key, VALUE value, st_data_t data)
static void mark_tbl (rb_objspace_t *objspace, st_table *tbl)
static int mark_key (VALUE key, VALUE value, st_data_t data)
static void mark_set (rb_objspace_t *objspace, st_table *tbl)
void rb_mark_set (st_table *tbl)
static int mark_keyvalue (VALUE key, VALUE value, st_data_t data)
static void mark_hash (rb_objspace_t *objspace, st_table *tbl)
void rb_mark_hash (st_table *tbl)
static void mark_method_entry (rb_objspace_t *objspace, const rb_method_entry_t *me)
void rb_mark_method_entry (const rb_method_entry_t *me)
static int mark_method_entry_i (ID key, const rb_method_entry_t *me, st_data_t data)
static void mark_m_tbl (rb_objspace_t *objspace, st_table *tbl)
static int free_method_entry_i (ID key, rb_method_entry_t *me, st_data_t data)
void rb_free_m_table (st_table *tbl)
static int mark_const_entry_i (ID key, const rb_const_entry_t *ce, st_data_t data)
static void mark_const_tbl (rb_objspace_t *objspace, st_table *tbl)
static int free_const_entry_i (ID key, rb_const_entry_t *ce, st_data_t data)
void rb_free_const_table (st_table *tbl)
void rb_mark_tbl (st_table *tbl)
void rb_gc_mark_maybe (VALUE obj)
void rb_gc_mark (VALUE ptr)
static int obj_free (rb_objspace_t *, VALUE)
static void add_freelist (rb_objspace_t *objspace, RVALUE *p)
static void finalize_list (rb_objspace_t *objspace, RVALUE *p)
static void unlink_heap_slot (rb_objspace_t *objspace, struct heaps_slot *slot)
static void free_unused_heaps (rb_objspace_t *objspace)
static void slot_sweep (rb_objspace_t *objspace, struct heaps_slot *sweep_slot)
static int ready_to_gc (rb_objspace_t *objspace)
static void before_gc_sweep (rb_objspace_t *objspace)
static void after_gc_sweep (rb_objspace_t *objspace)
static int lazy_sweep (rb_objspace_t *objspace)
static void rest_sweep (rb_objspace_t *objspace)
static void gc_marks (rb_objspace_t *objspace)
static void gc_sweep (rb_objspace_t *objspace)
void rb_gc_force_recycle (VALUE p)
static void make_deferred (RVALUE *p)
static void make_io_deferred (RVALUE *p)
static void mark_current_machine_context (rb_objspace_t *objspace, rb_thread_t *th)
int rb_garbage_collect (void)
void rb_gc_mark_machine_stack (rb_thread_t *th)
VALUE rb_gc_start (void)
void Init_stack (volatile VALUE *addr)
void Init_heap (void)
static VALUE lazy_sweep_enable (void)
static VALUE objspace_each_objects (VALUE arg)
void rb_objspace_each_objects (each_obj_callback *callback, void *data)
static int os_obj_of_i (void *vstart, void *vend, size_t stride, void *data)
static VALUE os_obj_of (VALUE of)
static VALUE os_each_obj (int argc, VALUE *argv, VALUE os)
static VALUE undefine_final (VALUE os, VALUE obj)
static VALUE define_final (int argc, VALUE *argv, VALUE os)
void rb_gc_copy_finalizer (VALUE dest, VALUE obj)
static VALUE run_single_final (VALUE arg)
static void run_finalizer (rb_objspace_t *objspace, VALUE objid, VALUE table)
static void finalize_deferred (rb_objspace_t *objspace)
void rb_gc_finalize_deferred (void)
static int force_chain_object (st_data_t key, st_data_t val, st_data_t arg)
void rb_gc_call_finalizer_at_exit (void)
void rb_gc (void)
static VALUE id2ref (VALUE obj, VALUE objid)
VALUE rb_obj_id (VALUE obj)
static int set_zero (st_data_t key, st_data_t val, st_data_t arg)
static VALUE count_objects (int argc, VALUE *argv, VALUE os)
static VALUE gc_count (VALUE self)
static VALUE gc_stat (int argc, VALUE *argv, VALUE self)
static VALUE gc_profile_record_get (void)
static VALUE gc_profile_result (void)
static VALUE gc_profile_report (int argc, VALUE *argv, VALUE self)
static VALUE gc_profile_total_time (VALUE self)
void Init_GC (void)

Variables

ruby_gc_params_t initial_params
int ruby_gc_debug_indent = 0
static rb_objspace_t rb_objspace = {{GC_MALLOC_LIMIT}, {HEAP_MIN_SLOTS}}
int * ruby_initial_gc_stress_ptr = &rb_objspace.gc_stress
st_tablerb_class_tbl
int ruby_disable_gc_stress = 0
VALUE rb_mGC
int ruby_stack_grow_direction

Define Documentation

#define CALC_EXACT_MALLOC_SIZE   0

Definition at line 349 of file gc.c.

#define COUNT_TYPE (  )     case (t): type = ID2SYM(rb_intern(#t)); break;
#define deferred_final_list   objspace->final.deferred

Definition at line 419 of file gc.c.

Referenced by finalize_deferred(), rb_objspace_call_finalizer(), and slot_sweep().

#define dont_gc   objspace->flags.dont_gc

Definition at line 416 of file gc.c.

Referenced by garbage_collect_with_gvl(), rb_gc_disable(), rb_gc_enable(), rb_newobj(), and ready_to_gc().

#define during_gc   objspace->flags.during_gc
#define finalizer_table   objspace->final.table
#define FREE_MIN   4096

Definition at line 83 of file gc.c.

#define freelist   objspace->heap.freelist
#define GC_MALLOC_LIMIT   8000000

Definition at line 80 of file gc.c.

#define GC_NOTIFY   0

Definition at line 2498 of file gc.c.

Referenced by garbage_collect().

#define GC_PROF_DEC_LIVE_NUM

Definition at line 272 of file gc.c.

Referenced by finalize_list(), and rb_gc_force_recycle().

#define GC_PROF_INC_LIVE_NUM

Definition at line 271 of file gc.c.

Referenced by rb_newobj().

#define GC_PROF_MARK_TIMER_START

Definition at line 259 of file gc.c.

Referenced by gc_marks().

#define GC_PROF_MARK_TIMER_STOP

Definition at line 260 of file gc.c.

Referenced by gc_marks().

#define GC_PROF_SET_HEAP_INFO ( record   ) 
Value:
do {\
        live = objspace->heap.live_num;\
        total = heaps_used * HEAP_OBJ_LIMIT;\
        (record).heap_total_objects = total;\
        (record).heap_use_size = live * sizeof(RVALUE);\
        (record).heap_total_size = total * sizeof(RVALUE);\
    } while(0)

Definition at line 264 of file gc.c.

#define GC_PROF_SET_MALLOC_INFO

Definition at line 263 of file gc.c.

Referenced by after_gc_sweep(), and gc_lazy_sweep().

#define GC_PROF_SWEEP_TIMER_START

Definition at line 261 of file gc.c.

Referenced by garbage_collect(), and gc_lazy_sweep().

#define GC_PROF_SWEEP_TIMER_STOP

Definition at line 262 of file gc.c.

Referenced by garbage_collect(), and gc_lazy_sweep().

#define GC_PROF_TIMER_START
Value:
do {\
        if (objspace->profile.run) {\
            if (!objspace->profile.record) {\
                objspace->profile.size = 1000;\
                objspace->profile.record = malloc(sizeof(gc_profile_record) * objspace->profile.size);\
            }\
            if (count >= objspace->profile.size) {\
                objspace->profile.size += 1000;\
                objspace->profile.record = realloc(objspace->profile.record, sizeof(gc_profile_record) * objspace->profile.size);\
            }\
            if (!objspace->profile.record) {\
                rb_bug("gc_profile malloc or realloc miss");\
            }\
            MEMZERO(&objspace->profile.record[count], gc_profile_record, 1);\
            gc_time = getrusage_time();\
            objspace->profile.record[count].gc_invoke_time = gc_time - objspace->profile.invoke_time;\
        }\
    } while(0)

Definition at line 174 of file gc.c.

Referenced by garbage_collect(), and gc_lazy_sweep().

#define GC_PROF_TIMER_STOP ( marked   ) 
Value:
do {\
        if (objspace->profile.run) {\
            gc_time = getrusage_time() - gc_time;\
            if (gc_time < 0) gc_time = 0;\
            objspace->profile.record[count].gc_time = gc_time;\
            objspace->profile.record[count].is_marked = !!(marked);\
            GC_PROF_SET_HEAP_INFO(objspace->profile.record[count]);\
            objspace->profile.count++;\
        }\
    } while(0)

Definition at line 193 of file gc.c.

Referenced by garbage_collect(), and gc_lazy_sweep().

#define GC_PROFILE_MORE_DETAIL   0

Definition at line 117 of file gc.c.

#define GET_STACK_BOUNDS ( start,
end,
appendix   ) 
Value:
((STACK_END < STACK_START) ? \
     ((start) = STACK_END, (end) = STACK_START) : ((start) = STACK_START, (end) = STACK_END+(appendix)))

Definition at line 2505 of file gc.c.

Referenced by mark_current_machine_context(), and rb_gc_mark_machine_stack().

#define global_List   objspace->global_list

Definition at line 420 of file gc.c.

Referenced by gc_marks(), rb_gc_register_address(), and rb_gc_unregister_address().

#define HEAP_MIN_SLOTS   10000

Definition at line 82 of file gc.c.

Referenced by init_heap().

#define HEAP_OBJ_LIMIT   (unsigned int)(HEAP_SIZE / sizeof(struct RVALUE))
#define HEAP_SIZE   0x4000

Definition at line 529 of file gc.c.

Referenced by assign_heap_slot().

#define heaps   objspace->heap.ptr

Definition at line 408 of file gc.c.

Referenced by assign_heap_slot(), before_gc_sweep(), garbage_collect(), and unlink_heap_slot().

#define heaps_freed   objspace->heap.freed

Definition at line 415 of file gc.c.

Referenced by free_unused_heaps().

#define heaps_inc   objspace->heap.increment

Definition at line 414 of file gc.c.

Referenced by add_heap_slots(), heaps_increment(), and set_heaps_increment().

#define heaps_length   objspace->heap.length

Definition at line 409 of file gc.c.

Referenced by add_heap_slots(), allocate_sorted_heaps(), and set_heaps_increment().

#define heaps_used   objspace->heap.used
#define himem   objspace->heap.range[1]

Definition at line 413 of file gc.c.

Referenced by assign_heap_slot(), and is_pointer_to_heap().

#define INIT_GC_PROF_PARAMS
Value:
double gc_time = 0;\
    size_t count = objspace->profile.count, total = 0, live = 0

Definition at line 257 of file gc.c.

Referenced by garbage_collect(), and gc_lazy_sweep().

#define initial_free_min   initial_params.initial_free_min

Definition at line 424 of file gc.c.

Referenced by before_gc_sweep(), and rb_gc_set_params().

#define initial_heap_min_slots   initial_params.initial_heap_min_slots

Definition at line 423 of file gc.c.

Referenced by initial_expand_heap(), and rb_gc_set_params().

#define initial_malloc_limit   initial_params.initial_malloc_limit

Definition at line 422 of file gc.c.

Referenced by after_gc_sweep(), and rb_gc_set_params().

#define lomem   objspace->heap.range[0]

Definition at line 412 of file gc.c.

Referenced by assign_heap_slot().

#define malloc_increase   objspace->malloc_params.increase

Definition at line 407 of file gc.c.

Referenced by after_gc_sweep(), vm_malloc_fixup(), vm_malloc_prepare(), and vm_xrealloc().

#define malloc_limit   objspace->malloc_params.limit

Definition at line 406 of file gc.c.

Referenced by after_gc_sweep(), and vm_malloc_prepare().

#define MARK_STACK_EMPTY   (mark_stack_ptr == mark_stack)

Definition at line 1493 of file gc.c.

#define nomem_error   GET_VM()->special_exceptions[ruby_error_nomemory]

Definition at line 101 of file gc.c.

Referenced by Init_GC(), and rb_memerror().

#define nonspecial_obj_id ( obj   )     (VALUE)((SIGNED_VALUE)(obj)|FIXNUM_FLAG)

Definition at line 104 of file gc.c.

Referenced by rb_obj_id().

#define NUM2PTR (  )     NUM2ULONG(x)
#define numberof ( array   )     (int)(sizeof(array) / sizeof((array)[0]))

Definition at line 2510 of file gc.c.

#define obj_id_to_ref ( objid   )     ((objid) ^ FIXNUM_FLAG)

Definition at line 105 of file gc.c.

Referenced by id2ref().

#define RANY (  )     ((RVALUE*)(o))
#define rb_gc_mark_locations ( start,
end   )     gc_mark_locations(objspace, (start), (end))
#define rb_jmp_buf   rb_jmpbuf_t

Definition at line 56 of file gc.c.

Referenced by mark_current_machine_context().

#define rb_setjmp ( env   )     RUBY_SETJMP(env)

Definition at line 55 of file gc.c.

Referenced by mark_current_machine_context().

#define ruby_gc_stress   objspace->gc_stress

Definition at line 421 of file gc.c.

Referenced by gc_stress_get(), gc_stress_set(), rb_newobj(), vm_malloc_prepare(), and vm_xrealloc().

#define SET_STACK_END   SET_MACHINE_STACK_END(&th->machine_stack_end)

Definition at line 1295 of file gc.c.

Referenced by gc_marks(), mark_current_machine_context(), ruby_stack_length(), and stack_check().

#define STACK_CHUNK_SIZE   500

Definition at line 333 of file gc.c.

Referenced by init_mark_stack().

#define STACK_END   (th->machine_stack_end)

Definition at line 1299 of file gc.c.

Referenced by mark_current_machine_context(), and ruby_stack_length().

#define STACK_LENGTH
Value:
((STACK_END < STACK_START) ? (size_t)(STACK_START - STACK_END) \
                        : (size_t)(STACK_END - STACK_START + 1))

Definition at line 1307 of file gc.c.

Referenced by ruby_stack_length(), and stack_check().

#define STACK_LEVEL_MAX   (th->machine_stack_maxsize/sizeof(VALUE))

Definition at line 1300 of file gc.c.

Referenced by stack_check().

#define STACK_START   (th->machine_stack_start)

Definition at line 1298 of file gc.c.

Referenced by mark_current_machine_context(), and ruby_stack_length().

#define STACKFRAME_FOR_CALL_CFUNC   512

Definition at line 1481 of file gc.c.

Referenced by ruby_stack_check().

#define STR_ASSOC   FL_USER3
#define TRY_WITH_GC ( alloc   ) 
Value:
do { \
        if (!(alloc) && \
            (!garbage_collect_with_gvl(objspace) || \
             !(alloc))) { \
            ruby_memerror(); \
        } \
    } while (0)

Definition at line 782 of file gc.c.

Referenced by vm_xcalloc(), and vm_xmalloc().

#define VALGRIND_MAKE_MEM_DEFINED ( p,
 ) 

Definition at line 51 of file gc.c.

#define VALGRIND_MAKE_MEM_UNDEFINED ( p,
 ) 

Definition at line 52 of file gc.c.


Typedef Documentation

typedef int each_obj_callback(void *, void *, size_t, void *)

Definition at line 2704 of file gc.c.

typedef struct mark_stack mark_stack_t
typedef struct rb_objspace rb_objspace_t
typedef struct stack_chunk stack_chunk_t

Function Documentation

static void add_freelist ( rb_objspace_t objspace,
RVALUE p 
) [inline, static]

Definition at line 2042 of file gc.c.

References freelist, and VALGRIND_MAKE_MEM_UNDEFINED.

Referenced by finalize_list(), rb_gc_force_recycle(), and slot_sweep().

static void add_heap_slots ( rb_objspace_t objspace,
size_t  add 
) [static]

Definition at line 1108 of file gc.c.

References allocate_sorted_heaps(), assign_heap_slot(), heaps_inc, heaps_length, and heaps_used.

Referenced by init_heap(), and initial_expand_heap().

static void add_stack_chunk_cache ( mark_stack_t stack,
stack_chunk_t chunk 
) [static]

Definition at line 1348 of file gc.c.

References mark_stack::cache, mark_stack::cache_size, and stack_chunk::next.

Referenced by init_mark_stack(), and pop_mark_stack_chunk().

static void after_gc_sweep ( rb_objspace_t objspace  )  [static]
void* alloca (  ) 
static void allocate_sorted_heaps ( rb_objspace_t objspace,
size_t  next_heaps_length 
) [static]
static void assign_heap_slot ( rb_objspace_t objspace  )  [static]
static void before_gc_sweep ( rb_objspace_t objspace  )  [static]
static VALUE count_objects ( int  argc,
VALUE argv,
VALUE  os 
) [static]
static VALUE define_final ( int  argc,
VALUE argv,
VALUE  os 
) [static]
static void finalize_deferred ( rb_objspace_t objspace  )  [static]

Definition at line 3043 of file gc.c.

References deferred_final_list, and finalize_list().

Referenced by rb_gc(), rb_gc_finalize_deferred(), and rb_objspace_call_finalizer().

static void finalize_list ( rb_objspace_t objspace,
RVALUE p 
) [static]
static int force_chain_object ( st_data_t  key,
st_data_t  val,
st_data_t  arg 
) [static]
static int free_const_entry_i ( ID  key,
rb_const_entry_t ce,
st_data_t  data 
) [static]

Definition at line 1719 of file gc.c.

References ST_CONTINUE, and xfree.

Referenced by rb_free_const_table().

static int free_method_entry_i ( ID  key,
rb_method_entry_t me,
st_data_t  data 
) [static]

Definition at line 1686 of file gc.c.

References rb_method_entry_struct::mark, rb_free_method_entry(), and ST_CONTINUE.

Referenced by rb_free_m_table().

static void free_unused_heaps ( rb_objspace_t objspace  )  [static]
static int garbage_collect ( rb_objspace_t objspace  )  [static]
static int garbage_collect_with_gvl ( rb_objspace_t objspace  )  [static]
static VALUE gc_count ( VALUE  self  )  [static]

Definition at line 3402 of file gc.c.

References count, and UINT2NUM().

Referenced by gc_profile_result(), and Init_GC().

static int gc_lazy_sweep ( rb_objspace_t objspace  )  [static]
static void gc_mark ( rb_objspace_t objspace,
VALUE  ptr 
) [static]
static void gc_mark_children ( rb_objspace_t objspace,
VALUE  ptr 
) [static]

Definition at line 1768 of file gc.c.

References RVALUE::array, RString::as, RArray::as, RVALUE::as, RVALUE::basic, BUILTIN_TYPE, RVALUE::complex, RVALUE::data, DATA_PTR, RRational::den, RData::dmark, rb_data_type_struct::dmark, ELTS_SHARED, rb_io_t::encs, RVALUE::file, FL_ANY, FL_EXIVAR, FL_MARK, FL_TEST, RBasic::flags, RFile::fptr, rb_data_type_struct::function, gc_mark(), RVALUE::hash, RString::heap, RArray::heap, rb_objspace::heap, if(), RHash::ifnone, RComplex::imag, is_pointer_to_heap(), RBasic::klass, len, rb_objspace::live_num, mark_const_tbl(), mark_hash(), mark_locations_array(), mark_m_tbl(), mark_tbl(), RVALUE::match, nd_type, RVALUE::node, NODE_ALIAS, NODE_ALLOCA, NODE_AND, NODE_ARGS, NODE_ARGS_AUX, NODE_ARGSCAT, NODE_ARRAY, NODE_BACK_REF, NODE_BLOCK, NODE_BLOCK_ARG, NODE_BLOCK_PASS, NODE_BREAK, NODE_CALL, NODE_CASE, NODE_CDECL, NODE_CLASS, NODE_COLON2, NODE_COLON3, NODE_CVAR, NODE_CVASGN, NODE_DASGN, NODE_DASGN_CURR, NODE_DEFINED, NODE_DEFN, NODE_DEFS, NODE_DOT2, NODE_DOT3, NODE_DREGX, NODE_DREGX_ONCE, NODE_DSTR, NODE_DVAR, NODE_DXSTR, NODE_ENSURE, NODE_ERRINFO, NODE_EVSTR, NODE_FALSE, NODE_FCALL, NODE_FLIP2, NODE_FLIP3, NODE_FOR, NODE_GASGN, NODE_GVAR, NODE_HASH, NODE_IASGN, NODE_IASGN2, NODE_IF, NODE_ITER, NODE_IVAR, NODE_LASGN, NODE_LIT, NODE_LVAR, NODE_MASGN, NODE_MATCH, NODE_MATCH2, NODE_MATCH3, NODE_MODULE, NODE_NEXT, NODE_NIL, NODE_NTH_REF, NODE_OP_ASGN1, NODE_OP_ASGN_AND, NODE_OP_ASGN_OR, NODE_OPT_ARG, NODE_OPT_N, NODE_OPTBLOCK, NODE_OR, NODE_POSTEXE, NODE_REDO, NODE_RESBODY, NODE_RESCUE, NODE_RETRY, NODE_RETURN, NODE_SCLASS, NODE_SCOPE, NODE_SELF, NODE_SPLAT, NODE_STR, NODE_SUPER, NODE_TO_ARY, NODE_TRUE, NODE_UNDEF, NODE_UNTIL, NODE_VALIAS, NODE_VCALL, NODE_WHEN, NODE_WHILE, NODE_XSTR, NODE_YIELD, NODE_ZARRAY, NODE_ZSUPER, RHash::ntbl, RRational::num, rb_io_t::pathv, RANY, RARRAY_LEN, RARRAY_PTR, RVALUE::rational, rb_bug(), rb_mark_generic_ivar(), rb_special_const_p(), RCLASS_CONST_TBL, RCLASS_IV_TBL, RCLASS_M_TBL, RCLASS_SUPER, RComplex::real, RMatch::regexp, RVALUE::regexp, ROBJECT_IVPTR, ROBJECT_NUMIV, RSTRING_NOEMBED, RSTRUCT_LEN, RSTRUCT_PTR, RTYPEDDATA_P, RRegexp::src, RMatch::str, STR_ASSOC, RVALUE::string, T_ARRAY, T_BIGNUM, T_CLASS, T_COMPLEX, T_DATA, T_FILE, T_FIXNUM, T_FLOAT, T_HASH, T_ICLASS, T_MATCH, T_MODULE, T_NIL, T_NODE, T_OBJECT, T_RATIONAL, T_REGEXP, T_STRING, T_STRUCT, T_ZOMBIE, rb_io_t::tied_io_for_writing, RTypedData::type, RVALUE::typeddata, rb_io_t::write_lock, rb_io_t::writeconv_asciicompat, and rb_io_t::writeconv_pre_ecopts.

Referenced by gc_mark_stacked_objects().

static void gc_mark_locations ( rb_objspace_t objspace,
VALUE start,
VALUE end 
) [static]

Definition at line 1554 of file gc.c.

References mark_locations_array().

Referenced by rb_gc_mark_locations().

static void gc_mark_stacked_objects ( rb_objspace_t objspace  )  [static]
static void gc_marks ( rb_objspace_t objspace  )  [static]
static VALUE gc_profile_clear ( void   )  [static]

Definition at line 688 of file gc.c.

References rb_objspace::count, MEMZERO, rb_objspace::profile, Qnil, rb_objspace::record, and rb_objspace::size.

Referenced by Init_GC().

static VALUE gc_profile_disable ( void   )  [static]

Definition at line 671 of file gc.c.

References FALSE, rb_objspace::profile, Qnil, and rb_objspace::run.

Referenced by Init_GC().

static VALUE gc_profile_enable ( void   )  [static]

Definition at line 654 of file gc.c.

References rb_objspace::profile, Qnil, rb_objspace::run, and TRUE.

Referenced by Init_GC().

static VALUE gc_profile_enable_get ( VALUE  self  )  [static]

Definition at line 639 of file gc.c.

References rb_objspace::profile, Qfalse, Qtrue, and rb_objspace::run.

Referenced by Init_GC().

static VALUE gc_profile_record_get ( void   )  [static]
static VALUE gc_profile_report ( int  argc,
VALUE argv,
VALUE  self 
) [static]

Definition at line 3603 of file gc.c.

References gc_profile_result(), Qnil, rb_io_write(), rb_scan_args(), and rb_stdout.

Referenced by Init_GC().

static VALUE gc_profile_result ( void   )  [static]
static VALUE gc_profile_total_time ( VALUE  self  )  [static]
static VALUE gc_stat ( int  argc,
VALUE argv,
VALUE  self 
) [static]
static VALUE gc_stress_get ( VALUE  self  )  [static]

Definition at line 604 of file gc.c.

References Qfalse, Qtrue, and ruby_gc_stress.

Referenced by Init_GC().

static VALUE gc_stress_set ( VALUE  self,
VALUE  flag 
) [static]

Definition at line 623 of file gc.c.

References rb_secure(), RTEST, and ruby_gc_stress.

Referenced by Init_GC().

static void gc_sweep ( rb_objspace_t objspace  )  [static]
static void* gc_with_gvl ( void *  ptr  )  [static]

Definition at line 721 of file gc.c.

References garbage_collect().

Referenced by garbage_collect_with_gvl().

static double getrusage_time ( void   )  [static]

Definition at line 139 of file gc.c.

References getrusage(), timeval::tv_sec, and timeval::tv_usec.

Referenced by init_heap().

static int heaps_increment ( rb_objspace_t objspace  )  [static]

Definition at line 1168 of file gc.c.

References assign_heap_slot(), FALSE, heaps_inc, and TRUE.

Referenced by after_gc_sweep(), gc_lazy_sweep(), lazy_sweep(), and ready_to_gc().

static VALUE id2ref ( VALUE  obj,
VALUE  objid 
) [static]
void Init_GC ( void   ) 
void Init_heap ( void   ) 

Definition at line 2690 of file gc.c.

References init_heap().

Referenced by ruby_init().

static void init_heap ( rb_objspace_t objspace  )  [static]
static void init_mark_stack ( mark_stack_t stack  )  [static]
void Init_stack ( volatile VALUE addr  ) 

Definition at line 2653 of file gc.c.

References ruby_init_stack().

static void initial_expand_heap ( rb_objspace_t objspace  )  [static]

Definition at line 1142 of file gc.c.

References add_heap_slots(), HEAP_OBJ_LIMIT, heaps_used, and initial_heap_min_slots.

Referenced by rb_gc_set_params().

static int is_mark_stask_empty ( mark_stack_t stack  )  [inline, static]

Definition at line 1342 of file gc.c.

References mark_stack::chunk, and NULL.

Referenced by pop_mark_stack().

static int is_pointer_to_heap ( rb_objspace_t objspace,
void *  ptr 
) [inline, static]
static int lazy_sweep ( rb_objspace_t objspace  )  [static]
static VALUE lazy_sweep_enable ( void   )  [static]

Definition at line 2696 of file gc.c.

References rb_objspace::dont_lazy_sweep, FALSE, rb_objspace::flags, and Qnil.

Referenced by rb_objspace_each_objects().

static void make_deferred ( RVALUE p  )  [inline, static]

Definition at line 2356 of file gc.c.

References RVALUE::as, RVALUE::basic, RBasic::flags, T_MASK, and T_ZOMBIE.

Referenced by make_io_deferred(), obj_free(), and rb_objspace_call_finalizer().

static void make_io_deferred ( RVALUE p  )  [inline, static]
static int mark_const_entry_i ( ID  key,
const rb_const_entry_t ce,
st_data_t  data 
) [static]

Definition at line 1702 of file gc.c.

References gc_mark(), mark_tbl_arg::objspace, ST_CONTINUE, and rb_const_entry_struct::value.

Referenced by mark_const_tbl().

static void mark_const_tbl ( rb_objspace_t objspace,
st_table tbl 
) [static]

Definition at line 1710 of file gc.c.

References mark_const_entry_i(), mark_tbl_arg::objspace, and st_foreach().

Referenced by gc_mark_children().

static void mark_current_machine_context ( rb_objspace_t objspace,
rb_thread_t th 
) [static]
static int mark_entry ( ID  key,
VALUE  value,
st_data_t  data 
) [static]

Definition at line 1576 of file gc.c.

References gc_mark(), mark_tbl_arg::objspace, and ST_CONTINUE.

Referenced by mark_tbl().

static void mark_hash ( rb_objspace_t objspace,
st_table tbl 
) [static]

Definition at line 1625 of file gc.c.

References mark_keyvalue(), mark_tbl_arg::objspace, and st_foreach().

Referenced by gc_mark_children(), and rb_mark_hash().

static int mark_key ( VALUE  key,
VALUE  value,
st_data_t  data 
) [static]

Definition at line 1593 of file gc.c.

References gc_mark(), mark_tbl_arg::objspace, and ST_CONTINUE.

Referenced by mark_set().

static int mark_keyvalue ( VALUE  key,
VALUE  value,
st_data_t  data 
) [static]

Definition at line 1616 of file gc.c.

References gc_mark(), mark_tbl_arg::objspace, and ST_CONTINUE.

Referenced by mark_hash().

static void mark_locations_array ( rb_objspace_t objspace,
register VALUE x,
register long  n 
) [static]
static void mark_m_tbl ( rb_objspace_t objspace,
st_table tbl 
) [static]

Definition at line 1677 of file gc.c.

References mark_method_entry_i(), mark_tbl_arg::objspace, and st_foreach().

Referenced by gc_mark_children().

static void mark_method_entry ( rb_objspace_t objspace,
const rb_method_entry_t me 
) [static]
static int mark_method_entry_i ( ID  key,
const rb_method_entry_t me,
st_data_t  data 
) [static]

Definition at line 1669 of file gc.c.

References mark_method_entry(), mark_tbl_arg::objspace, and ST_CONTINUE.

Referenced by mark_m_tbl().

static void mark_set ( rb_objspace_t objspace,
st_table tbl 
) [static]

Definition at line 1601 of file gc.c.

References mark_key(), mark_tbl_arg::objspace, and st_foreach().

Referenced by rb_mark_set().

static void mark_tbl ( rb_objspace_t objspace,
st_table tbl 
) [static]

Definition at line 1584 of file gc.c.

References mark_entry(), st_table::num_entries, mark_tbl_arg::objspace, and st_foreach().

Referenced by gc_mark_children(), gc_marks(), and rb_mark_tbl().

static void negative_size_allocation_error ( const char *  msg  )  [static]
static void* negative_size_allocation_error_with_gvl ( void *  ptr  )  [static]

Definition at line 697 of file gc.c.

References rb_eNoMemError, and rb_raise().

Referenced by negative_size_allocation_error().

static int obj_free ( rb_objspace_t objspace,
VALUE  obj 
) [static]
static VALUE objspace_each_objects ( VALUE  arg  )  [static]
static VALUE os_each_obj ( int  argc,
VALUE argv,
VALUE  os 
) [static]

Definition at line 2885 of file gc.c.

References os_each_struct::of, os_obj_of(), rb_scan_args(), rb_secure(), and RETURN_ENUMERATOR.

Referenced by Init_GC().

static VALUE os_obj_of ( VALUE  of  )  [static]

Definition at line 2838 of file gc.c.

References os_each_struct::num, os_each_struct::of, os_obj_of_i(), rb_objspace_each_objects(), and SIZET2NUM.

Referenced by os_each_obj().

static int os_obj_of_i ( void *  vstart,
void *  vend,
size_t  stride,
void *  data 
) [static]
static int pop_mark_stack ( mark_stack_t stack,
VALUE data 
) [static]
static void pop_mark_stack_chunk ( mark_stack_t stack  )  [static]
static void push_mark_stack ( mark_stack_t stack,
VALUE  data 
) [static]

Definition at line 1416 of file gc.c.

References mark_stack::chunk, stack_chunk::data, mark_stack::index, mark_stack::limit, and push_mark_stack_chunk().

Referenced by gc_mark().

static void push_mark_stack_chunk ( mark_stack_t stack  )  [static]
VALUE rb_data_object_alloc ( VALUE  klass,
void *  datap,
RUBY_DATA_FUNC  dmark,
RUBY_DATA_FUNC  dfree 
)

Definition at line 1242 of file gc.c.

References Check_Type, NEWOBJ, OBJSETUP, T_CLASS, and T_DATA.

VALUE rb_data_typed_object_alloc ( VALUE  klass,
void *  datap,
const rb_data_type_t type 
)

Definition at line 1255 of file gc.c.

References Check_Type, NEWOBJ, OBJSETUP, T_CLASS, and T_DATA.

int rb_during_gc ( void   ) 

Definition at line 1179 of file gc.c.

References during_gc.

void rb_free_const_table ( st_table tbl  ) 

Definition at line 1726 of file gc.c.

References free_const_entry_i(), st_foreach(), and st_free_table().

Referenced by init_copy(), obj_free(), and rb_mod_init_copy().

void rb_free_m_table ( st_table tbl  ) 

Definition at line 1695 of file gc.c.

References free_method_entry_i(), st_foreach(), and st_free_table().

Referenced by obj_free(), and rb_mod_init_copy().

int rb_garbage_collect ( void   ) 

Definition at line 2614 of file gc.c.

References garbage_collect().

void rb_gc ( void   ) 
void rb_gc_call_finalizer_at_exit ( void   ) 

Definition at line 3078 of file gc.c.

References rb_objspace_call_finalizer().

Referenced by ruby_finalize_1().

void rb_gc_copy_finalizer ( VALUE  dest,
VALUE  obj 
)

Definition at line 2966 of file gc.c.

References finalizer_table, FL_FINALIZE, FL_SET, FL_TEST, st_insert(), and st_lookup().

Referenced by init_copy().

VALUE rb_gc_disable ( void   ) 
VALUE rb_gc_enable ( void   ) 
void rb_gc_finalize_deferred ( void   ) 

Definition at line 3054 of file gc.c.

References finalize_deferred().

Referenced by rb_threadptr_execute_interrupts_common().

void rb_gc_force_recycle ( VALUE  p  ) 
void rb_gc_mark ( VALUE  ptr  ) 
void rb_gc_mark_locations ( VALUE start,
VALUE end 
)

Definition at line 1564 of file gc.c.

References gc_mark_locations().

void rb_gc_mark_machine_stack ( rb_thread_t th  ) 

Definition at line 2620 of file gc.c.

References GET_STACK_BOUNDS, rb_gc_mark_locations, and stack_start.

Referenced by rb_thread_mark().

void rb_gc_mark_maybe ( VALUE  obj  ) 
void rb_gc_register_address ( VALUE addr  ) 

Definition at line 976 of file gc.c.

References ALLOC, global_List, gc_list::next, and gc_list::varptr.

Referenced by Init_coverage(), Init_curses(), Init_iconv(), and rb_global_variable().

void rb_gc_register_mark_object ( VALUE  obj  ) 
void rb_gc_set_params ( void   ) 
VALUE rb_gc_start ( void   ) 

Definition at line 2644 of file gc.c.

References Qnil, and rb_gc().

Referenced by Init_GC().

void rb_gc_unregister_address ( VALUE addr  ) 

Definition at line 988 of file gc.c.

References global_List, gc_list::next, gc_list::varptr, and xfree.

Referenced by curses_finalize().

void rb_global_variable ( VALUE var  ) 
void rb_mark_hash ( st_table tbl  ) 

Definition at line 1634 of file gc.c.

References mark_hash().

Referenced by Init_win32ole(), mark_dump_arg(), and mark_load_arg().

void rb_mark_method_entry ( const rb_method_entry_t me  ) 

Definition at line 1663 of file gc.c.

References mark_method_entry().

Referenced by bm_mark(), and rb_gc_mark_unlinked_live_method_entries().

void rb_mark_set ( st_table tbl  ) 

Definition at line 1610 of file gc.c.

References mark_set().

Referenced by mark_dump_arg().

void rb_mark_tbl ( st_table tbl  ) 

Definition at line 1733 of file gc.c.

References mark_tbl().

Referenced by autoload_mark(), mark_load_arg(), rb_mark_generic_ivar(), rb_thread_mark(), and rb_vm_mark().

void rb_memerror ( void   ) 
VALUE rb_newobj ( void   ) 
NODE* rb_node_newnode ( enum node_type  type,
VALUE  a0,
VALUE  a1,
VALUE  a2 
)

Definition at line 1227 of file gc.c.

References nd_set_type, rb_newobj(), and T_NODE.

Referenced by enum_zip(), parser_heredoc_identifier(), and rb_autoload().

VALUE rb_obj_id ( VALUE  obj  ) 
static void rb_objspace_call_finalizer ( rb_objspace_t objspace  )  [static]
size_t rb_objspace_data_type_memsize ( VALUE  obj  ) 

Definition at line 1271 of file gc.c.

References RTYPEDDATA_DATA, RTYPEDDATA_P, and RTYPEDDATA_TYPE.

Referenced by memsize_of().

const char* rb_objspace_data_type_name ( VALUE  obj  ) 

Definition at line 1282 of file gc.c.

References RTYPEDDATA_P, and RTYPEDDATA_TYPE.

Referenced by cto_i().

void rb_objspace_each_objects ( each_obj_callback callback,
void *  data 
)
static int ready_to_gc ( rb_objspace_t objspace  )  [static]

Definition at line 2187 of file gc.c.

References dont_gc, during_gc, FALSE, freelist, heaps_increment(), set_heaps_increment(), and TRUE.

Referenced by garbage_collect(), and gc_lazy_sweep().

static void rest_sweep ( rb_objspace_t objspace  )  [static]
int ruby_get_stack_grow_direction ( volatile VALUE addr  ) 

Definition at line 1313 of file gc.c.

References SET_MACHINE_STACK_END.

static void ruby_memerror ( void   )  [static]
static void* ruby_memerror_body ( void *  dummy  )  [static]

Definition at line 554 of file gc.c.

References rb_memerror().

Referenced by ruby_memerror().

int ruby_stack_check ( void   ) 

Definition at line 1484 of file gc.c.

References stack_check(), and STACKFRAME_FOR_CALL_CFUNC.

Referenced by stack_check().

size_t ruby_stack_length ( VALUE **  p  ) 

Definition at line 1455 of file gc.c.

References GET_THREAD, SET_STACK_END, STACK_END, STACK_LENGTH, STACK_START, and STACK_UPPER.

void* ruby_xcalloc ( size_t  n,
size_t  size 
)

Definition at line 892 of file gc.c.

References vm_xcalloc().

void ruby_xfree ( void *  x  ) 
void* ruby_xmalloc ( size_t  size  ) 

Definition at line 857 of file gc.c.

References vm_xmalloc().

Referenced by rb_dl_malloc(), and rb_dlptr_malloc().

void* ruby_xmalloc2 ( size_t  n,
size_t  size 
)

Definition at line 873 of file gc.c.

References vm_xmalloc(), and xmalloc2_size().

void* ruby_xrealloc ( void *  ptr,
size_t  size 
)

Definition at line 898 of file gc.c.

References vm_xrealloc().

Referenced by rb_dl_realloc(), and ruby_xrealloc2().

void* ruby_xrealloc2 ( void *  ptr,
size_t  n,
size_t  size 
)

Definition at line 904 of file gc.c.

References len, rb_eArgError, rb_raise(), and ruby_xrealloc().

static void run_final ( rb_objspace_t objspace,
VALUE  obj 
) [static]
static void run_finalizer ( rb_objspace_t objspace,
VALUE  objid,
VALUE  table 
) [static]
static VALUE run_single_final ( VALUE  arg  )  [static]

Definition at line 2981 of file gc.c.

References args, Qnil, and rb_eval_cmd().

Referenced by run_finalizer().

static void set_heaps_increment ( rb_objspace_t objspace  )  [static]

Definition at line 1152 of file gc.c.

References allocate_sorted_heaps(), heaps_inc, heaps_length, and heaps_used.

Referenced by after_gc_sweep(), gc_lazy_sweep(), and ready_to_gc().

static int set_zero ( st_data_t  key,
st_data_t  val,
st_data_t  arg 
) [static]

Definition at line 3281 of file gc.c.

References INT2FIX, rb_hash_aset(), and ST_CONTINUE.

Referenced by count_objects().

static void shrink_stack_chunk_cache ( mark_stack_t stack  )  [static]
static void slot_sweep ( rb_objspace_t objspace,
struct heaps_slot sweep_slot 
) [static]
static int stack_check ( int  water_mark  )  [static]

Definition at line 1465 of file gc.c.

References GET_THREAD, SET_STACK_END, STACK_LENGTH, and STACK_LEVEL_MAX.

Referenced by ruby_stack_check().

static stack_chunk_t* stack_chunk_alloc ( void   )  [static]

Definition at line 1330 of file gc.c.

References malloc, and rb_memerror().

Referenced by init_mark_stack(), and push_mark_stack_chunk().

static VALUE undefine_final ( VALUE  os,
VALUE  obj 
) [static]

Definition at line 2909 of file gc.c.

References finalizer_table, FL_FINALIZE, FL_UNSET, rb_check_frozen, and st_delete().

Referenced by Init_GC().

static void unlink_heap_slot ( rb_objspace_t objspace,
struct heaps_slot slot 
) [static]

Definition at line 2074 of file gc.c.

References rb_objspace::heap, heaps, heaps_slot::next, NULL, heaps_slot::prev, and rb_objspace::sweep_slots.

Referenced by slot_sweep().

static void* vm_malloc_fixup ( rb_objspace_t objspace,
void *  mem,
size_t  size 
) [inline, static]

Definition at line 768 of file gc.c.

References malloc_increase, and rb_objspace::malloc_params.

Referenced by vm_xcalloc(), and vm_xmalloc().

static size_t vm_malloc_prepare ( rb_objspace_t objspace,
size_t  size 
) [inline, static]
static void* vm_xcalloc ( rb_objspace_t objspace,
size_t  count,
size_t  elsize 
) [static]

Definition at line 879 of file gc.c.

References calloc, size, TRY_WITH_GC, vm_malloc_fixup(), vm_malloc_prepare(), and xmalloc2_size().

Referenced by ruby_xcalloc().

static void vm_xfree ( rb_objspace_t objspace,
void *  ptr 
) [static]

Definition at line 843 of file gc.c.

References free, rb_objspace::malloc_params, and size.

Referenced by ruby_xfree(), and vm_xrealloc().

static void* vm_xmalloc ( rb_objspace_t objspace,
size_t  size 
) [static]

Definition at line 791 of file gc.c.

References malloc, TRY_WITH_GC, vm_malloc_fixup(), and vm_malloc_prepare().

Referenced by ruby_xmalloc(), ruby_xmalloc2(), and vm_xrealloc().

static void* vm_xrealloc ( rb_objspace_t objspace,
void *  ptr,
size_t  size 
) [static]
static size_t xmalloc2_size ( size_t  n,
size_t  size 
) [inline, static]

Definition at line 863 of file gc.c.

References len, rb_eArgError, and rb_raise().

Referenced by ruby_xmalloc2(), and vm_xcalloc().


Variable Documentation

Initial value:

Definition at line 92 of file gc.c.

Definition at line 966 of file gc.c.

rb_objspace_t rb_objspace = {{GC_MALLOC_LIMIT}, {HEAP_MIN_SLOTS}} [static]

Definition at line 403 of file gc.c.

Definition at line 541 of file gc.c.

Definition at line 114 of file gc.c.

Definition at line 404 of file gc.c.

Referenced by set_debug_option().

Definition at line 1311 of file gc.c.


Generated on 9 Oct 2013 for Ruby by  doxygen 1.6.1