summaryrefslogtreecommitdiff
path: root/gc.c
AgeCommit message (Collapse)Author
2014-07-25introduce ZALLOC{,_N} to replace ALLOC{,_N}+MEMZERO usenormal
Using calloc where possible reduces code and binary sizes. * include/ruby/ruby.h (ZALLOC, ZALLOC_N): implement (Data_Make_Struct, TypedData_Make_Struct): ZALLOC replaces ALLOC+memset * compile.c (iseq_seq_sequence): ZALLOC_N replaces ALLOC_N+MEMZERO * cont.c (fiber_t_alloc): ZALLOC replaces ALLOC+MEMZERO * io.c (rb_io_reopen): ditto * iseq.c (prepare_iseq_build): ditto * parse.y (new_args_tail_gen, parser_new, ripper_s_allocate): ditto * re.c (match_alloc): ditto * variable.c (rb_const_set): ditto * ext/socket/raddrinfo.c (get_addrinfo): ditto * ext/strscan/strscan.c (strscan_s_allocate): ditto * gc.c (rb_objspace_alloc): calloc replaces malloc+MEMZERO git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46952 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-25* gc.c: change objspace::rgengc::parent_object_is_old (boolean)ko1
to objspace::rgengc::parent_object (VALUE). Use Qfalse or RVALUE pointer instead of FALSE and TRUE. * gc.c (gc_marks_body): should clear parent_object just before gc_mark_roots() because there are no parents objects for root objects. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46939 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-25* gc.c (rb_gc_writebarrier_remember_promoted): should remember onlyko1
OLD objects on RGENGC_AGE2_PROMOTION. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46938 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-25* gc.c (gc_mark_stacked_objects): fix error message.ko1
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46937 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-24* gc.c: fix major GC flags.ko1
* add GPR_FLAG_MAJOR_BY_FORCE, which indicates major GC by METHOD, CAPI and so on (see GC_BY). * remove GPR_FLAG_MAJOR_BY_RESCAN because not used. * remove GPR_FLAG_MAJOR_BY_STRESS, use FORCE instead. * test/ruby/test_gc.rb: catch up. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46927 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-16* gc.c (gc_mark_roots): call rb_vm_mark directly.ko1
* vm.c: remove mark function for RubyVM object because RubyVM object marked manually. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46832 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-10gc.c: fix typonobu
* gc.c (global_list): fix typo, capital 'L'. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46773 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-09* symbol.c: remove rb_gc_mark_symbols().ko1
fstrings refered by static symbols and pinned dynamic symbols are registerd by rb_gc_register_mark_object(). frstring refered by dynamic symbols (not pinned symbols) are refered from global_symbols.dsymbol_fstr_hash (Hash object). Note that fstrings refered from dynamic symbols must live loger than symbol objects themselves because rb_gc_free_dsymbol() uses fstring to remove from symbol tables. This is why we can not mark fstrings from dynamic symbols. This technique reduces root objects for GC marking. * gc.c (gc_mark_roots): ditto. * internal.h: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46772 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-07* gc.c: revert miss-commit.ko1
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46740 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-07* parse.y: need to use updated (re-created) symbols.ko1
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46737 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-06* gc.c: rename is_dying_object() to is_garbage_object().ko1
* gc.h: rb_objspace_garbage_object_p() as an exported function. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46726 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-06* gc.c (is_dying_object): fix missed condition.ko1
* gc.c (is_live_object): move frequent path first. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46717 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-06* gc.c: rename is_dead_object() to is_dying_object().ko1
This function is not opposite against is_live_object() because is_dying_object() does *not* check object type. * gc.c (is_dying_object): change condition. * gc.c (is_live_object): use T_NONE instead of 0. * gc.c (rb_objspace_dying_object_p): added. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46716 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-06* gc.c (rb_gc_register_mark_object): change data structure.ko1
From single array, to array of arrays. Each array only has 1024 entries. * vm.c (Init_vm_objects): change default capa from 1 to 128. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46714 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-03Init functions don't need ID cachesnobu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46663 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-02* gc.c (gc_heap_lazy_sweep): simplify logic.ko1
* gc.c (gc_page_sweep): return TRUE if empty slots are available. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46653 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-30gc.c: freeze GC::OPTSnobu
* gc.c (Init_GC): freeze GC::OPTS. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46627 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-30* gc.c (gc_stat_internal): return size_t value instead of VALUEko1
and remove `out' parameter. * gc.c: add braces for `if' statements. * gc.c (gc_stat_internal): fix comment. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46623 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-30* gc.c: support `USE_RGENGC == 0'.ko1
* test/ruby/test_gc.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46622 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-18constify parametersnobu
* include/ruby/intern.h: constify `argv` parameters. * include/ruby/ruby.h: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46459 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-17* gc.c (obj_memsize_of): memsize_of(T_ZOMBIE) returns 0, not a rb_bug.ko1
ObjectSpace.count_objects_size() uses memsize_of(T_ZOMBIE). This bug introduced at r46348. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46455 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-10* gc.c: invoke GC before memory allocation (xmalloc/xrealloc)ko1
when GC.stress = true. [Bug #9859] * test/ruby/test_gc.rb: add a test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46399 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-09* gc.c: change full GC timing to keep lower memory usage.ko1
Extend heap only at (1) after major GC or (2) after several (two times, at current) minor GC Details in https://bugs.ruby-lang.org/issues/9607#note-9 [Bug #9607] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46387 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-09gc.c: fix typonobu
* gc.c (gcdebug_sentinel): fix typo, "sentinel" not "sential". [fix GH-634] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46386 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-05* gc.c (gc_page_sweep): refactoring.ko1
* gc.c (gc_page_sweep): should not set, but add final_slots into sweep_page->final_slots. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46356 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-05* gc.c (obj_free): check also FL_PROMOTED bit by RVALUE_OLD_P().ko1
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46351 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-04* gc.c: introduce RZombie to manage zombie objects.ko1
Rewrite finalizing logics with this type. * gc.c (gc_verify_internal_consistency): verify zombie (finalizing) objects count. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46348 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-03* gc.c (rb_objspace_free): should not rest_sweep() here.ko1
Some data structures are already freed. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46340 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-03revert r46332 because RVALUE_OLD_P() returns int by r46334ko1
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46338 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-03* gc.c (rb_gc_call_finalizer_at_exit): addko1
gc_verify_internal_consistency() when RGENGC_CHECK_MODE >= 2. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46337 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-03* gc.c: change the counting method for young objects.ko1
clear counter at the beggining of every GC and count promoted (infant->young) objects. Some promotions (infant->young) are transition of promoting to old objects. We should not count such promotions. With this technique, we don't need to check young objects at obj_free(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46336 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-03* gc.c: add verifying counters code in gc_verify_internal_consistency().ko1
gc_verify_internal_consistency() counts all - live objects - young objects (if age2 promotion) - old objects in all pages and compares with objspace managing counters. * gc.c (gc_after_sweep): do gc_verify_internal_consistency() when RGENGC_CHECK_MODE >= 2. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46335 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-03gc.c: int for simple predicatesnobu
* gc.c: use int for simple predicate functions instead of VALUE. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46334 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-03* gc.c (rb_gc_force_recycle): we only need to know the result (0/1)ko1
of RVALUE_OLD_P(). clang fails to compile it because is_old is `int' but RVALUE_OLD_P() returns VALUE. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46332 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-03* gc.c (objspace_live_slot): live slot count should not include finalko1
slot (contains T_ZOMBIE) count. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46330 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-03* gc.c (obj_free): fix spacing.ko1
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46329 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-03* gc.c (check_gen_consistency): fix error message.ko1
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46328 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-03* gc.c: count old/young objects more correctly.ko1
* gc.c (RVALUE_DEMOTE_FROM_OLD): decrement old object count. * gc.c (RVALUE_DEMOTE_FROM_YOUNG): decrement young object count. * gc.c (rb_gc_resurrect): increment old object count. * gc.c (gc_marks_body): should not add old object count. This code is completely my misunderstanding. * gc.c (rb_gc_force_recycle): decrement young or old object count correctly. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46327 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-29remove empty rb_gc_mark_parser functionnormal
* parse.y (rb_gc_mark_parser): remove, empty since r8758 * internal.h: ditto, not usable from extensions since 2.0.0 * gc.c (gc_mark_roots): remove checkpoint for parser git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46239 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-24gc.c: fix typonobu
* gc.c (objspace_malloc_increase): fix typo. "increase" not "incraese". git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46072 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-22gc.c (rb_free_m_tbl): mark function as staticnormal
* gc.c (rb_free_m_tbl): mark function as static * method.h (rb_free_m_tbl): remove prototype git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46055 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-18fix typenaruse
struct RVALUE.file is const char*. struct RVALUE.line is int. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46003 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-16* gc.c (gc_marks, gc_marks_body): increase the counter of young objectsko1
at the major GC because AGE2Promotion changes all old objects into young objects at major GC. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45960 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-16* gc.c (gc_before_sweep): heap_pages_swept_slots should containsko1
heap_pages_increment. For example, GC by exceeding malloc_limit can remain heap_pages_increment. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45959 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-15* gc.c (heap_extend_pages): fix indent.nobu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45952 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-15* gc.c (garbage_collect_body): move gc_heap_prepare_minimum_pages()ko1
from gc_sweep(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45950 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-15* gc.c (heap_extend_pages): calculate next growing heap size.ko1
* gc.c (heap_set_increment): accept addition pages instead of minimum pages. * gc.c (gc_after_sweep): use heap_etend_pages(). * gc.c (gc_heap_prepare_minimum_pages): add only 1 page. * gc.c (heap_ready_to_gc): add only 1 page. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45949 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-15* gc.c: introduce macros to remove magic number.ko1
GC_HEAP_FREE_SLOTS_MIN_RATIO = 0.3: guarantee minimum empty slots ratio after sweep. GC_HEAP_FREE_SLOTS_MAX_RATIO = 0.8: allow to free pages 0.2 (= 1-0.8) of current existing slots. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45948 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-14* gc.c: enable RGENGC_AGE2_PROMOTION.ko1
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45943 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-14* gc.c (rgengc_rememberset_mark): promote remembered object earlier.ko1
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45942 b2dd03c8-39d4-4d8f-98ff-823fe69b080e