Data Structures | Defines | Typedefs | Functions | Variables

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 "gc.h"
#include <stdio.h>
#include <setjmp.h>
#include <sys/types.h>
Include dependency graph for gc.c:

Go to the source code of this file.

Data Structures

struct  gc_profile_record
struct  RVALUE
struct  heaps_slot
struct  gc_list
struct  rb_objspace
struct  mark_tbl_arg
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 nomem_error   GET_VM()->special_exceptions[ruby_error_nomemory]
#define MARK_STACK_MAX   1024
#define GC_PROFILE_MORE_DETAIL   0
#define GC_PROF_TIMER_START
#define GC_PROF_TIMER_STOP
#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
#define HEAP_MIN_SLOTS   10000
#define FREE_MIN   4096
#define CALC_EXACT_MALLOC_SIZE   0
#define rb_objspace   (*GET_VM()->objspace)
#define malloc_limit   objspace->malloc_params.limit
#define malloc_increase   objspace->malloc_params.increase
#define heap_slots   objspace->heap.slots
#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 mark_stack   objspace->markstack.buffer
#define mark_stack_ptr   objspace->markstack.ptr
#define mark_stack_overflow   objspace->markstack.overflow
#define global_List   objspace->global_list
#define ruby_gc_stress   objspace->gc_stress
#define need_call_final   (finalizer_table && finalizer_table->num_entries)
#define HEAP_SIZE   0x4000
#define HEAP_OBJ_LIMIT   (HEAP_SIZE / sizeof(struct RVALUE))
#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 GC_WATER_MARK   512
#define MARK_STACK_EMPTY   (mark_stack_ptr == mark_stack)
#define rb_gc_mark_locations(start, end)   gc_mark_locations(objspace, start, end)
#define GC_LEVEL_MAX   250
#define STR_ASSOC   FL_USER3
#define GC_NOTIFY   0
#define GET_STACK_BOUNDS(start, end, appendix)
#define NUM2PTR(x)   NUM2ULONG(x)
#define COUNT_TYPE(t)   case t: type = ID2SYM(rb_intern(#t)); break;

Typedefs

typedef struct gc_profile_record gc_profile_record
typedef struct RVALUE RVALUE
typedef struct rb_objspace rb_objspace_t

Functions

int rb_io_fptr_finalize (struct rb_io_t *)
void * alloca ()
static double getrusage_time (void)
static void rb_objspace_call_finalizer (rb_objspace_t *objspace)
rb_objspace_trb_objspace_alloc (void)
void rb_objspace_free (rb_objspace_t *objspace)
static void run_final (rb_objspace_t *objspace, VALUE obj)
static int garbage_collect (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 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)
void * ruby_xmalloc2 (size_t n, size_t size)
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_heaps (rb_objspace_t *objspace, size_t next_heaps_length)
static void assign_heap_slot (rb_objspace_t *objspace)
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)
static VALUE rb_newobj_from_heap (rb_objspace_t *objspace)
int rb_during_gc (void)
VALUE rb_newobj (void)
NODErb_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)
size_t ruby_stack_length (VALUE **p)
static int stack_check (void)
int ruby_stack_check (void)
static void init_mark_stack (rb_objspace_t *objspace)
static void gc_mark (rb_objspace_t *objspace, VALUE ptr, int lev)
static void gc_mark_children (rb_objspace_t *objspace, VALUE ptr, int lev)
static void gc_mark_all (rb_objspace_t *objspace)
static void gc_mark_rest (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, int lev)
static int mark_key (VALUE key, VALUE value, st_data_t data)
static void mark_set (rb_objspace_t *objspace, st_table *tbl, int lev)
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, int lev)
void rb_mark_hash (st_table *tbl)
static void mark_method_entry (rb_objspace_t *objspace, const rb_method_entry_t *me, int lev)
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, int lev)
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)
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 free_unused_heaps (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)
void rb_vm_mark (void *ptr)
static void mark_current_machine_context (rb_objspace_t *objspace, rb_thread_t *th)
void rb_gc_mark_encodings (void)
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)
void rb_objspace_each_objects (int(*callback)(void *vstart, void *vend, size_t stride, void *d), 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 obj, VALUE objid, VALUE table)
static void finalize_deferred (rb_objspace_t *objspace)
static void gc_finalize_deferred (rb_objspace_t *objspace)
void rb_gc_finalize_deferred (void)
static int chain_finalized_object (st_data_t key, st_data_t val, st_data_t arg)
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_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

int ruby_gc_debug_indent = 0
static int ruby_initial_gc_stress = 0
int * ruby_initial_gc_stress_ptr = &ruby_initial_gc_stress
VALUE rb_cMutex
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 294 of file gc.c.

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

Definition at line 361 of file gc.c.

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

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

Definition at line 287 of file gc.c.

Referenced by gc_sweep().

#define freelist   objspace->heap.freelist

Definition at line 353 of file gc.c.

Referenced by add_freelist(), assign_heap_slot(), garbage_collect(), gc_sweep(), and rb_newobj_from_heap().

#define GC_LEVEL_MAX   250

Definition at line 1489 of file gc.c.

Referenced by gc_mark().

#define GC_MALLOC_LIMIT   8000000

Definition at line 78 of file gc.c.

Referenced by gc_sweep().

#define GC_NOTIFY   0

Definition at line 2097 of file gc.c.

Referenced by garbage_collect().

#define GC_PROF_MARK_TIMER_START

Definition at line 225 of file gc.c.

#define GC_PROF_MARK_TIMER_STOP

Definition at line 226 of file gc.c.

#define GC_PROF_SET_HEAP_INFO
Value:
do {\
        if (objspace->profile.run) {\
            gc_profile_record *record = &objspace->profile.record[objspace->profile.count];\
            record->heap_total_objects = heaps_used * HEAP_OBJ_LIMIT;\
            record->heap_use_size = live * sizeof(RVALUE); \
            record->heap_total_size = heaps_used * HEAP_SIZE;\
        }\
    } while(0)

Definition at line 230 of file gc.c.

#define GC_PROF_SET_MALLOC_INFO

Definition at line 229 of file gc.c.

#define GC_PROF_SWEEP_TIMER_START

Definition at line 227 of file gc.c.

#define GC_PROF_SWEEP_TIMER_STOP

Definition at line 228 of file gc.c.

#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 144 of file gc.c.

#define GC_PROF_TIMER_STOP
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.count++;\
        }\
    } while(0)

Definition at line 163 of file gc.c.

#define GC_PROFILE_MORE_DETAIL   0

Definition at line 88 of file gc.c.

#define GC_WATER_MARK   512

Definition at line 1198 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 2106 of file gc.c.

Referenced by mark_current_machine_context(), and rb_gc_mark_machine_stack().

#define global_List   objspace->global_list
#define HEAP_MIN_SLOTS   10000

Definition at line 286 of file gc.c.

Referenced by init_heap().

#define HEAP_OBJ_LIMIT   (HEAP_SIZE / sizeof(struct RVALUE))

Definition at line 428 of file gc.c.

Referenced by assign_heap_slot(), and gc_sweep().

#define HEAP_SIZE   0x4000

Definition at line 420 of file gc.c.

Referenced by assign_heap_slot().

#define heap_slots   objspace->heap.slots

Definition at line 349 of file gc.c.

#define heaps   objspace->heap.ptr
#define heaps_freed   objspace->heap.freed

Definition at line 357 of file gc.c.

Referenced by free_unused_heaps().

#define heaps_inc   objspace->heap.increment

Definition at line 356 of file gc.c.

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

#define heaps_length   objspace->heap.length

Definition at line 351 of file gc.c.

Referenced by allocate_heaps(), init_heap(), and set_heaps_increment().

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

Definition at line 355 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

Definition at line 223 of file gc.c.

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

Definition at line 354 of file gc.c.

Referenced by assign_heap_slot().

#define malloc_increase   objspace->malloc_params.increase

Definition at line 348 of file gc.c.

Referenced by gc_sweep(), vm_xmalloc(), and vm_xrealloc().

#define malloc_limit   objspace->malloc_params.limit

Definition at line 347 of file gc.c.

Referenced by gc_sweep(), rb_objspace_alloc(), and vm_xmalloc().

#define mark_stack   objspace->markstack.buffer

Definition at line 362 of file gc.c.

Referenced by gc_mark(), and gc_mark_rest().

#define MARK_STACK_EMPTY   (mark_stack_ptr == mark_stack)

Definition at line 1242 of file gc.c.

Referenced by garbage_collect().

#define MARK_STACK_MAX   1024

Definition at line 83 of file gc.c.

Referenced by gc_mark().

#define mark_stack_overflow   objspace->markstack.overflow

Definition at line 364 of file gc.c.

Referenced by garbage_collect(), gc_mark(), and init_mark_stack().

#define mark_stack_ptr   objspace->markstack.ptr

Definition at line 363 of file gc.c.

Referenced by gc_mark(), gc_mark_rest(), and init_mark_stack().

#define need_call_final   (finalizer_table && finalizer_table->num_entries)

Definition at line 368 of file gc.c.

Referenced by gc_sweep().

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

Definition at line 81 of file gc.c.

Referenced by Init_GC(), and rb_memerror().

#define NUM2PTR (   x  )     NUM2ULONG(x)
#define RANY (   o  )     ((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 54 of file gc.c.

Referenced by mark_current_machine_context().

#define rb_objspace   (*GET_VM()->objspace)

Definition at line 340 of file gc.c.

#define rb_setjmp (   env  )     RUBY_SETJMP(env)

Definition at line 53 of file gc.c.

Referenced by mark_current_machine_context().

#define ruby_gc_stress   objspace->gc_stress
#define SET_STACK_END   SET_MACHINE_STACK_END(&th->machine_stack_end)

Definition at line 1170 of file gc.c.

#define STACK_END   (th->machine_stack_end)

Definition at line 1174 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 1182 of file gc.c.

Referenced by stack_check().

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

Definition at line 1175 of file gc.c.

Referenced by stack_check().

#define STACK_START   (th->machine_stack_start)

Definition at line 1173 of file gc.c.

Referenced by mark_current_machine_context(), and ruby_stack_length().

#define STR_ASSOC   FL_USER3

Referenced by gc_mark_children().

#define VALGRIND_MAKE_MEM_DEFINED (   p,
  n 
)

Definition at line 47 of file gc.c.

Referenced by mark_locations_array().

#define VALGRIND_MAKE_MEM_UNDEFINED (   p,
  n 
)

Definition at line 48 of file gc.c.

Referenced by add_freelist().


Typedef Documentation

typedef struct rb_objspace rb_objspace_t
typedef struct RVALUE RVALUE

Function Documentation

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

Definition at line 1795 of file gc.c.

References freelist, and VALGRIND_MAKE_MEM_UNDEFINED.

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

void* alloca (  ) 
static void allocate_heaps ( rb_objspace_t objspace,
size_t  next_heaps_length 
) [static]

Definition at line 875 of file gc.c.

References during_gc, heaps, heaps_length, heaps_used, malloc, rb_memerror(), realloc, and size.

Referenced by init_heap(), and set_heaps_increment().

static void assign_heap_slot ( rb_objspace_t objspace  )  [static]
static int chain_finalized_object ( st_data_t  key,
st_data_t  val,
st_data_t  arg 
) [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 2615 of file gc.c.

References deferred_final_list, and finalize_list().

Referenced by 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_method_entry_i ( ID  key,
rb_method_entry_t me,
st_data_t  data 
) [static]

Definition at line 1462 of file gc.c.

References rb_free_method_entry().

Referenced by rb_free_m_table().

static void free_unused_heaps ( rb_objspace_t objspace  )  [static]

Definition at line 1821 of file gc.c.

References free, heaps, heaps_freed, last, heaps_slot::limit, and heaps_slot::membase.

Referenced by gc_finalize_deferred(), and gc_sweep().

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 2996 of file gc.c.

References count, and UINT2NUM().

Referenced by gc_profile_result(), and Init_GC().

static void gc_finalize_deferred ( rb_objspace_t objspace  )  [static]

Definition at line 2626 of file gc.c.

References finalize_deferred(), and free_unused_heaps().

Referenced by rb_gc(), and rb_gc_finalize_deferred().

static void gc_mark ( rb_objspace_t objspace,
VALUE  ptr,
int  lev 
) [static]
static void gc_mark_all ( rb_objspace_t objspace  )  [static]

Definition at line 1248 of file gc.c.

References RVALUE::as, RVALUE::basic, FL_MARK, RBasic::flags, gc_mark_children(), heaps, and init_mark_stack().

Referenced by garbage_collect().

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

Definition at line 1524 of file gc.c.

References RVALUE::array, RString::as, RArray::as, RVALUE::as, RVALUE::basic, BUILTIN_TYPE, RNode::cnt, RVALUE::complex, RVALUE::data, DATA_PTR, RRational::den, RData::dmark, rb_data_type_struct::dmark, rb_io_t::rb_io_enc_t::ecopts, ELTS_SHARED, rb_io_t::encs, RVALUE::file, FL_ANY, FL_EXIVAR, FL_MARK, FL_TEST, RBasic::flags, RFile::fptr, gc_mark(), RVALUE::hash, RString::heap, RArray::heap, if(), RHash::ifnone, RComplex::imag, is_pointer_to_heap(), RBasic::klass, len, mark_hash(), mark_locations_array(), mark_m_tbl(), mark_tbl(), RVALUE::match, nd_type, RNode::node, 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_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, RNode::u1, RNode::u2, RNode::u3, RNode::value, rb_io_t::write_lock, rb_io_t::writeconv_asciicompat, and rb_io_t::writeconv_pre_ecopts.

Referenced by gc_mark(), gc_mark_all(), and gc_mark_rest().

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

Definition at line 1325 of file gc.c.

References mark_locations_array().

Referenced by rb_gc_mark_locations().

static void gc_mark_rest ( rb_objspace_t objspace  )  [static]

Definition at line 1267 of file gc.c.

References gc_mark_children(), init_mark_stack(), mark_stack, mark_stack_ptr, and MEMCPY.

Referenced by garbage_collect().

static VALUE gc_profile_clear ( void   )  [static]

Definition at line 581 of file gc.c.

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

Referenced by Init_GC().

static VALUE gc_profile_disable ( void   )  [static]

Definition at line 564 of file gc.c.

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

Referenced by Init_GC().

static VALUE gc_profile_enable ( void   )  [static]

Definition at line 546 of file gc.c.

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

Referenced by Init_GC().

static VALUE gc_profile_enable_get ( VALUE  self  )  [static]

Definition at line 530 of file gc.c.

References rb_objspace::profile, 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 3133 of file gc.c.

References gc_profile_result(), 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_stress_get ( VALUE  self  )  [static]

Definition at line 495 of file gc.c.

References Qtrue, and ruby_gc_stress.

Referenced by Init_GC().

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

Definition at line 514 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 614 of file gc.c.

References garbage_collect().

Referenced by garbage_collect_with_gvl().

static double getrusage_time ( void   )  [static]

Definition at line 109 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 996 of file gc.c.

References assign_heap_slot(), and heaps_inc.

Referenced by garbage_collect(), gc_sweep(), and rb_newobj_from_heap().

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

Definition at line 2299 of file gc.c.

References init_heap().

Referenced by ruby_init().

static void init_mark_stack ( rb_objspace_t objspace  )  [static]

Definition at line 1236 of file gc.c.

References mark_stack_overflow, and mark_stack_ptr.

Referenced by garbage_collect(), gc_mark_all(), and gc_mark_rest().

void Init_stack ( volatile VALUE addr  ) 

Definition at line 2262 of file gc.c.

References ruby_init_stack().

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

Definition at line 1283 of file gc.c.

References heaps, himem, heaps_slot::limit, RANY, and heaps_slot::slot.

Referenced by gc_mark_children(), id2ref(), mark_locations_array(), and rb_gc_mark_maybe().

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

Definition at line 1958 of file gc.c.

References RVALUE::as, RVALUE::basic, RBasic::flags, 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 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 1348 of file gc.c.

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

Referenced by mark_tbl().

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

Definition at line 1399 of file gc.c.

References mark_tbl_arg::lev, 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 1366 of file gc.c.

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

Referenced by mark_set().

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

Definition at line 1390 of file gc.c.

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

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,
int  lev 
) [static]

Definition at line 1452 of file gc.c.

References mark_tbl_arg::lev, 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,
int  lev 
) [static]
static int mark_method_entry_i ( ID  key,
const rb_method_entry_t me,
st_data_t  data 
) [static]

Definition at line 1444 of file gc.c.

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

Referenced by mark_m_tbl().

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

Definition at line 1374 of file gc.c.

References mark_tbl_arg::lev, 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,
int  lev 
) [static]
static void negative_size_allocation_error ( const char *  msg  )  [static]
static void* negative_size_allocation_error_with_gvl ( void *  ptr  )  [static]

Definition at line 590 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 os_each_obj ( int  argc,
VALUE argv,
VALUE  os 
) [static]

Definition at line 2465 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 2418 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]
VALUE rb_data_object_alloc ( VALUE  klass,
void *  datap,
RUBY_DATA_FUNC  dmark,
RUBY_DATA_FUNC  dfree 
)

Definition at line 1117 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 1130 of file gc.c.

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

int rb_during_gc ( void   ) 

Definition at line 1055 of file gc.c.

void rb_free_m_table ( st_table tbl  ) 

Definition at line 1469 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 2223 of file gc.c.

References garbage_collect().

void rb_gc ( void   ) 
void rb_gc_call_finalizer_at_exit ( void   ) 

Definition at line 2672 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 2548 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 2633 of file gc.c.

References gc_finalize_deferred().

Referenced by rb_threadptr_execute_interrupts_rec().

void rb_gc_force_recycle ( VALUE  p  ) 
void rb_gc_mark ( VALUE  ptr  ) 
void rb_gc_mark_encodings ( void   ) 

Definition at line 173 of file encoding.c.

Referenced by garbage_collect().

void rb_gc_mark_locations ( VALUE start,
VALUE end 
)

Definition at line 1335 of file gc.c.

References gc_mark_locations().

void rb_gc_mark_machine_stack ( rb_thread_t th  ) 

Definition at line 2229 of file gc.c.

References GET_STACK_BOUNDS, and rb_gc_mark_locations.

Referenced by rb_thread_mark().

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

Definition at line 839 of file gc.c.

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

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

void rb_gc_register_mark_object ( VALUE  obj  ) 
VALUE rb_gc_start ( void   ) 

Definition at line 2253 of file gc.c.

References rb_gc().

Referenced by Init_GC().

void rb_gc_unregister_address ( VALUE addr  ) 

Definition at line 851 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  ) 

Definition at line 439 of file gc.c.

References rb_gc_register_address().

Referenced by Init_RandomSeed(), Init_Regexp(), Init_syck(), Init_tcltklib(), and Init_tkutil().

int rb_io_fptr_finalize ( struct rb_io_t  ) 

Definition at line 3516 of file io.c.

Referenced by pipe_atexit(), and rb_io_close_read().

void rb_mark_hash ( st_table tbl  ) 

Definition at line 1409 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 1438 of file gc.c.

References mark_method_entry().

Referenced by bm_mark().

void rb_mark_set ( st_table tbl  ) 

Definition at line 1384 of file gc.c.

References mark_set().

Referenced by mark_dump_arg().

void rb_mark_tbl ( st_table tbl  ) 
void rb_memerror ( void   ) 
VALUE rb_newobj ( void   ) 
static VALUE rb_newobj_from_heap ( rb_objspace_t objspace  )  [static]
NODE* rb_node_newnode ( enum node_type  type,
VALUE  a0,
VALUE  a1,
VALUE  a2 
)

Definition at line 1102 of file gc.c.

References RNode::flags, nd_set_type, rb_newobj(), RNode::u1, RNode::u2, RNode::u3, and RNode::value.

VALUE rb_obj_id ( VALUE  obj  ) 
rb_objspace_t* rb_objspace_alloc ( void   )  [read]

Definition at line 374 of file gc.c.

References malloc, malloc_limit, ruby_gc_stress, and ruby_initial_gc_stress.

Referenced by Init_BareVM().

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

Definition at line 1146 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 1157 of file gc.c.

References RTYPEDDATA_P, and RTYPEDDATA_TYPE.

void rb_objspace_each_objects ( int(*)(void *vstart, void *vend, size_t stride, void *d)  callback,
void *  data 
)

Definition at line 2341 of file gc.c.

References RVALUE::as, RVALUE::basic, callback(), RBasic::flags, heaps, and heaps_used.

void rb_objspace_free ( rb_objspace_t objspace  ) 
void rb_vm_mark ( void *  ptr  ) 
int ruby_get_stack_grow_direction ( volatile VALUE addr  ) 

Definition at line 1188 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 445 of file gc.c.

References rb_memerror().

Referenced by ruby_memerror().

int ruby_stack_check ( void   ) 

Definition at line 1226 of file gc.c.

References stack_check().

Referenced by stack_check().

size_t ruby_stack_length ( VALUE **  p  ) 

Definition at line 1201 of file gc.c.

References GET_THREAD, STACK_END, STACK_START, and STACK_UPPER.

void* ruby_xcalloc ( size_t  n,
size_t  size 
)

Definition at line 752 of file gc.c.

References ruby_xmalloc2().

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

Definition at line 736 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 742 of file gc.c.

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

Referenced by ruby_xcalloc().

void* ruby_xrealloc ( void *  ptr,
size_t  size 
)

Definition at line 761 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 767 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  obj,
VALUE  objid,
VALUE  table 
) [static]
static VALUE run_single_final ( VALUE  arg  )  [static]

Definition at line 2562 of file gc.c.

References rb_eval_cmd().

Referenced by run_finalizer().

static void set_heaps_increment ( rb_objspace_t objspace  )  [static]

Definition at line 980 of file gc.c.

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

Referenced by garbage_collect(), and gc_sweep().

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

Definition at line 2875 of file gc.c.

References hash(), INT2FIX, and rb_hash_aset().

Referenced by count_objects().

static int stack_check ( void   )  [static]

Definition at line 1210 of file gc.c.

References GET_THREAD, STACK_LENGTH, and STACK_LEVEL_MAX.

Referenced by gc_mark(), and ruby_stack_check().

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

Definition at line 2489 of file gc.c.

References finalizer_table, FL_FINALIZE, FL_UNSET, OBJ_FROZEN, rb_error_frozen(), and st_delete().

Referenced by Init_GC().

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

Definition at line 722 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]
static void* vm_xrealloc ( rb_objspace_t objspace,
void *  ptr,
size_t  size 
) [static]

Variable Documentation

Definition at line 60 of file thread.c.

Referenced by Init_Thread(), rb_mutex_new(), and rb_objspace_call_finalizer().

Definition at line 829 of file gc.c.

Referenced by Init_GC().

Definition at line 433 of file gc.c.

Referenced by rb_newobj_from_heap(), vm_xmalloc(), and vm_xrealloc().

Definition at line 85 of file gc.c.

int ruby_initial_gc_stress = 0 [static]

Definition at line 341 of file gc.c.

Referenced by rb_objspace_alloc().

Definition at line 342 of file gc.c.

Definition at line 1186 of file gc.c.