mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
added. Unlinked method entries are collected to vm->unlinked_method_entry_list. On the GC timing, mark all method entries which are on all living threads. Only non-marked method entries are collected. This hack prevents releasing living method entry. [Performance Consideration] Since this Method Entry GC (MEGC) doesn't occuer frequently, MEGC will not be a performance bottleneck. However, to traverse living method entries, every control frame push needs to clear cfp->me field. This will be a performance issue (because pushing control frame is occurred frequently). Bug #2777 [ruby-dev:40457] * cont.c (fiber_init): init cfp->me. * gc.c (garbage_collect): kick rb_sweep_method_entry(). * method.h (rb_method_entry_t): add a mark field. * vm.c (invoke_block_from_c): set passed me. * vm.c (rb_thread_mark): mark cfp->me. * vm_core.h (rb_thread_t): add a field passed_me. * vm_core.h (rb_vm_t): add a field unlinked_method_entry_list. * vm_insnhelper.c (vm_push_frame): clear cfp->me at all times. * vm_insnhelper.c (vm_call_bmethod): pass me. * bootstraptest/test_method.rb: add a test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27634 b2dd03c8-39d4-4d8f-98ff-823fe69b080e |
||
|---|---|---|
| .. | ||
| pending.rb | ||
| runner.rb | ||
| test_attr.rb | ||
| test_autoload.rb | ||
| test_block.rb | ||
| test_class.rb | ||
| test_eval.rb | ||
| test_exception.rb | ||
| test_finalizer.rb | ||
| test_flip.rb | ||
| test_flow.rb | ||
| test_fork.rb | ||
| test_gc.rb | ||
| test_io.rb | ||
| test_jump.rb | ||
| test_literal.rb | ||
| test_load.rb | ||
| test_marshal.rb | ||
| test_massign.rb | ||
| test_method.rb | ||
| test_objectspace.rb | ||
| test_proc.rb | ||
| test_struct.rb | ||
| test_syntax.rb | ||
| test_thread.rb | ||