summaryrefslogtreecommitdiff
path: root/gc.c
AgeCommit message (Collapse)Author
2019-08-13* expand tabs.git
2019-08-13Removed non-VM_OBJSPACE codeNobuyoshi Nakada
It has not been used for 4 years, since r60856, e33b1690d06f867e45750bd8e3e8b06d78b5bc26.
2019-08-13Refactored `objspace_each_objects`Nobuyoshi Nakada
As `rb_objspace_each_objects_without_setup` doesn't reset and restore `dont_incremental` flag, renamed the bare iterator as `objspace_each_objects_without_setup`. `objspace_each_objects` calls it when called with the flag disabled, wrap the arguments otherwise only.
2019-08-13Move rb_objspace_t* in objspace_reachable_objects_from_root to an argumentNobuyoshi Nakada
2019-08-13* expand tabs.git
2019-08-13Hoisted out GPR_DEFAULT_REASONNobuyoshi Nakada
2019-08-13Move rb_objspace_t* in gc_verify_internal_consistency to an argumentNobuyoshi Nakada
2019-08-13Renamed ruby_finalize_{0,1}Nobuyoshi Nakada
And pass rb_execution_context_t as an argument.
2019-08-12Rename rb_gc_mark_no_pin -> rb_gc_mark_movableAaron Patterson
Renaming this function. "No pin" leaks some implementation details. We just want users to know that if they mark this object, the reference may move and they'll need to update the reference accordingly.
2019-08-12also unpin `final` on weak mapsAaron Patterson
2019-08-09gc.c: Double STACKFRAME_FOR_CALL_CFUNC (1024->2048)Yusuke Endoh
ef64ab917eec02491f6bf7233a4031a8c35385e3 didn't fix the issue, so the size seems not enough yet. https://rubyci.org/logs/rubyci.s3.amazonaws.com/osx1014/ruby-master/log/20190809T114503Z.fail.html.gz
2019-08-09gc.c: Increase STACKFRAME_FOR_CALL_CFUNCYusuke Endoh
On macOS Mojave, the child process invoked in TestFiber#test_stack_size gets stuck because the stack overflow detection is too late. (ko1 figured out the mechanism of the failure.) This change attempts to detect stack overflow earlier.
2019-08-06Extracted wmap_live_pNobuyoshi Nakada
2019-08-05Let prev EP move againAaron Patterson
The last time we committed this, we were asking the VM to write to the ep. But VM assertions check if the ENV data is the correct type, which if it's a T_MOVED pointer it's not the correct type. So the vm assertions would fail. This time we just directly write to it from the GC and that bypasses the vm assertion checks.
2019-08-06* expand tabs.git
2019-08-05add compaction support to weak mapsAaron Patterson
2019-08-02add debug_counters to check details.Koichi Sasada
add debug_counters to check the Hash object statistics.
2019-08-01Fix assertion failure when VM_CHECK_MODENobuyoshi Nakada
Some VM frames (dummy and top pushed by `rb_vm_call_cfunc`) has iseq but has no pc.
2019-08-01fix tracepoint + backtrace SEGV卜部昌平
PC modification in gc_event_hook_body was careless. There are (so to say) abnormal iseqs stored in the cfp. We have to check sanity before we touch the PC. This has not been fixed because there was no way to (ab)use the setup from pure-Ruby. However by using our official C APIs it is possible to touch such frame(s), resulting in SEGV. Fixes [Bug #14834].
2019-07-31Revert "Let prev EP move"Aaron Patterson
This reverts commit e352445863588b90f7af6cdf6c1b6dc432ee33ab. This is breaking CI and I'm not sure why yet, so I'll revert for now.
2019-07-31Let prev EP moveAaron Patterson
This commit allows the previos EP pointer to move, then updates its location
2019-07-26pass to obj_info().Koichi Sasada
obj_info() has a routine to show SPECIAL_CONST_P() objects so we don't need to check it here.
2019-07-23Let memory sizes of the various IMEMO object types be reflected correctlyLourens Naudé
[Feature #15805] Closes: https://github.com/ruby/ruby/pull/2140
2019-07-22Document BasicObject does not implement #object_id and #send [ci skip]Jeremy Evans
Fixes [Bug #10422]
2019-07-22constify RHash::ifnone.Koichi Sasada
RHash::ifnone should be protected by write-barriers so this field should be const. However, to introduce GC.compact, the const was removed. This commit revert this removing `const` and modify gc.c `TYPED_UPDATE_IF_MOVED` to remove `const` forcely by a type cast.
2019-07-19Only disable GC around reference updatingAaron Patterson
This is the only place that can change the size of the object id tables and cause a GC.
2019-07-19fix debug counter for Hash counts.Koichi Sasada
Change debug_counters for Hash object counts: * obj_hash_under4 (1-3) -> obj_hash_1_4 (1-4) * obj_hash_ge4 (4-7) -> obj_hash_5_8 (5-8) * obj_hash_ge8 (>=8) -> obj_hash_g8 (> 8) For example on rdoc benchmark: [RUBY_DEBUG_COUNTER] obj_hash_empty 554,900 [RUBY_DEBUG_COUNTER] obj_hash_under4 572,998 [RUBY_DEBUG_COUNTER] obj_hash_ge4 1,825 [RUBY_DEBUG_COUNTER] obj_hash_ge8 2,344 [RUBY_DEBUG_COUNTER] obj_hash_empty 553,097 [RUBY_DEBUG_COUNTER] obj_hash_1_4 571,880 [RUBY_DEBUG_COUNTER] obj_hash_5_8 982 [RUBY_DEBUG_COUNTER] obj_hash_g8 2,189
2019-07-19fix shared array terminology.Koichi Sasada
Shared arrays created by Array#dup and so on points a shared_root object to manage lifetime of Array buffer. However, sometimes shared_root is called only shared so it is confusing. So I fixed these wording "shared" to "shared_root". * RArray::heap::aux::shared -> RArray::heap::aux::shared_root * ARY_SHARED() -> ARY_SHARED_ROOT() * ARY_SHARED_NUM() -> ARY_SHARED_ROOT_REFCNT() Also, add some debug_counters to count shared array objects. * ary_shared_create: shared ary by Array#dup and so on. * ary_shared: finished in shard. * ary_shared_root_occupied: shared_root but has only 1 refcnt. The number (ary_shared - ary_shared_root_occupied) is meaningful.
2019-07-15simplify around GC_ASSERT()Koichi Sasada
2019-07-12Make `stack_check` slightly easier to use in debugger.Samuel Williams
2019-07-11Suppress warning on x64-mingwNobuyoshi Nakada
2019-07-10Don't manipulate GC flags directlyAaron Patterson
We need to disable the GC around compaction (for now) because object id book keeping can cause malloc to happen and that can trigger GC.
2019-07-04Revert self-referencing finalizer warning [Feature #15974]Nobuyoshi Nakada
It has caused CI failures. * d0cd0866d82a58933e5dccd073c753c0c2ad4eb5 Disable GC during rb_objspace_reachable_object_p * 89cef1c56b3a0f9c5e6ccc22a5044477a4fd16c1 Version guard for [Feature #15974] * 796eeb6339952d92ae1b353d450c7883e589852d. Fix up [Feature #15974] * 928260c2a613bbdd4402c300e0bf86ae7562e52a. Warn in verbose mode on defining a finalizer that captures the object
2019-07-04* expand tabs.git
2019-07-04Disable GC during rb_objspace_reachable_object_pNobuyoshi Nakada
Try to fix CI breakage by [Feature #15974].
2019-07-03Renamed to rb_objspace_reachable_object_pNobuyoshi Nakada
2019-07-03Ensure that GC is disabled during compactionAaron Patterson
Various things can cause GC to occur when compaction is running, for example resizing the object identity map: ``` frame #24: 0x000000010c784a10 ruby`gc_grey [inlined] push_mark_stack(stack=<unavailable>, data=<unavailable>) at gc.c:4311:42 frame #25: 0x000000010c7849ff ruby`gc_grey(objspace=0x00007fc56c804400, obj=140485906037400) at gc.c:4907 frame #26: 0x000000010c78f881 ruby`gc_start at gc.c:6464:8 frame #27: 0x000000010c78f5d1 ruby`gc_start [inlined] gc_marks_start(objspace=0x00007fc56c804400, full_mark=<unavailable>) at gc.c:6009 frame #28: 0x000000010c78f3c0 ruby`gc_start at gc.c:6291 frame #29: 0x000000010c78f399 ruby`gc_start(objspace=0x00007fc56c804400, reason=<unavailable>) at gc.c:7104 frame #30: 0x000000010c78930c ruby`objspace_xmalloc0 [inlined] objspace_malloc_fixup(objspace=<unavailable>, mem=0x000000011372a000, size=<unavailable>) at gc.c:9665:5 frame #31: 0x000000010c7892f5 ruby`objspace_xmalloc0(objspace=0x00007fc56c804400, size=12582912) at gc.c:9707 frame #32: 0x000000010c89bc13 ruby`st_init_table_with_size(type=<unavailable>, size=<unavailable>) at st.c:605:39 frame #33: 0x000000010c89c5e2 ruby`rebuild_table_if_necessary [inlined] rebuild_table(tab=0x00007fc56c40b250) at st.c:780:19 frame #34: 0x000000010c89c5ac ruby`rebuild_table_if_necessary(tab=0x00007fc56c40b250) at st.c:1142 frame #35: 0x000000010c89c379 ruby`st_insert(tab=0x00007fc56c40b250, key=140486132605040, value=140485922918920) at st.c:1161:5 frame #36: 0x000000010c794a16 ruby`gc_compact_heap [inlined] gc_move(objspace=0x00007fc56c804400, scan=<unavailable>, free=<unavailable>, moved_list=140485922918960) at gc.c:7441:9 frame #37: 0x000000010c794917 ruby`gc_compact_heap(objspace=0x00007fc56c804400, comparator=<unavailable>) at gc.c:7695 frame #38: 0x000000010c79410d ruby`gc_compact [inlined] gc_compact_after_gc(objspace=0x00007fc56c804400, use_toward_empty=1, use_double_pages=<unavailable>, use_verifier=1) at gc.c:0:22 ``` We *definitely* need the heap to be in a consistent state during compaction, so this commit sets the current state to "during_gc" so that nothing will trigger a GC until the heap finishes compacting. This fixes the bug we saw when running the tests for https://github.com/ruby/ruby/pull/2264
2019-07-03* expand tabs.git
2019-07-03Fix up [Feature #15974]Nobuyoshi Nakada
* Fixed warning condition * Fixed function signature * Use ident hash
2019-07-03Warn in verbose mode on defining a finalizer that captures the objectChris Seaton
[Feature #15974] Closes: https://github.com/ruby/ruby/pull/2264
2019-06-23Frozen objects in WeakMapNobuyoshi Nakada
* gc.c (wmap_aset): bypass check for frozen and allow frozen object in WeakMap. [Bug #13498]
2019-06-19Adjust indentNobuyoshi Nakada
2019-06-19Remove IA64 support.Samuel Williams
2019-06-19Rework debug conditional.Samuel Williams
2019-06-19Move vm stack init into thread.Samuel Williams
2019-06-07Adjust indentNobuyoshi Nakada
2019-06-03Pin keys in "compare by identity" hashesAaron Patterson
Hashes that compare by identity care about the location of the object in memory. Since they care about the memory location, we can't let them move.
2019-06-03object id is stable now for all objects, so we can let hash keys moveAaron Patterson
2019-06-03allow objects in imemo envs to moveAaron Patterson
2019-06-04get rid of a warning of VC++NAKAMURA Usaku