summaryrefslogtreecommitdiff
path: root/gc.c
AgeCommit message (Collapse)Author
2021-03-12Constified variables for getenvNobuyoshi Nakada
2021-03-02Don't use mmap on platforms that have large OS page sizesPeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/4235
2021-03-02Fix typoPeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/4235
2021-02-25Disable auto compaction on platforms that do not support itPeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/4227
2021-02-25Use mmap for allocating heap pagesPeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/4227
2021-02-24Reverting PR #4221Aaron Patterson
It seems this breaks tests on Solaris, so I'm reverting it until we figure out the right fix. http://rubyci.s3.amazonaws.com/solaris11-sunc/ruby-master/log/20210224T210007Z.fail.html.gz
2021-02-24Disable auto compaction on platforms that do not support itPeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/4221
2021-02-24Use mmap for allocating heap pagesPeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/4221
2021-02-19show more information about imemo_mentKoichi Sasada
rb_obj_info(obj) (rp(obj)) doesn't show enough information for non-iseq methods, so this patch shows more. Notes: Merged: https://github.com/ruby/ruby/pull/4201
2021-02-18sync check_rvalue_consistency_force()Koichi Sasada
check_rvalue_consistency_force() uses is_pointer_to_heap() and it should be synchronized with other ractors. [Bug #17636] Notes: Merged: https://github.com/ruby/ruby/pull/4194
2021-02-18clear RVALUE on NEWOBJ event.Koichi Sasada
NEWOBJ event is called without clearing RVALUE values (v1, v2, v3). This patch clear them before NEWOBJ tracepoint internal hook. [Bug #17599] Notes: Merged: https://github.com/ruby/ruby/pull/4196
2021-02-18sync GC rest if neededKoichi Sasada
marking requires a barrier (stop all Ractors) and gc_enter() does it. However, it doesn't check rest event which can start marking. [Bug #17599] Notes: Merged: https://github.com/ruby/ruby/pull/4195
2021-02-17Removed no-longer used variableNobuyoshi Nakada
2021-02-16Remove unreachable if statement in gc_page_sweepPeter Zhu
This if statement is not reachable because `was_compacting` cannot be true when `heap->compact_cursor` is NULL. Notes: Merged: https://github.com/ruby/ruby/pull/4192
2021-02-04Don't register non-heap allocated objectsAaron Patterson
`rb_define_const` can add objects as "mark objects". This is to make code like this work: https://github.com/ruby/ruby/blob/33d6e92e0c6eaf1308ce7108e653c53bb5fb106c/ext/etc/etc.c#L1201 ``` rb_define_const(rb_cStruct, "Passwd", sPasswd); /* deprecated name */ ``` sPasswd is a heap allocated object that is also a C global, so we can't move it (it needs to be pinned). However, we have many calls to `rb_define_const` that just pass in an integer like this: ``` rb_define_const(rb_cDBM, "WRITER", INT2FIX(O_RDWR|RUBY_DBM_RW_BIT)); ``` Non heap allocated objects like integers will never move, so there is no reason to waste time in the GC marking / pinning them. Notes: Merged: https://github.com/ruby/ruby/pull/4152
2021-02-01Use RCLASS_EXT macro instead of directly accessing ptrMatt Valentine-House
Notes: Merged: https://github.com/ruby/ruby/pull/4124
2021-02-01Add RCLASS_SUBCLASSES MacroMatt Valentine-House
Notes: Merged: https://github.com/ruby/ruby/pull/4124
2021-01-31Removed static assertion about size of `RVALUE`Nobuyoshi Nakada
It is unable where unaligned word access is disallowed and `double` is wider than pointers.
2021-01-31Narrowed down the condition to pack RValueNobuyoshi Nakada
Because of `double` in `RFloat`, `RValue` would be packed by `sizeof(double)` by default, on platforms where `double` is wider than `VALUE`. Size of `RValue` is multiple of 5 now.
2021-01-27[Fixes #17538] Fix assertion failure when rincgc is turned offPeter Zhu
Co-Authored-By: Matt Valentine-House <31869+eightbitraptor@users.noreply.github.com> Notes: Merged: https://github.com/ruby/ruby/pull/4064
2021-01-26Re-enable RGENGC_DEBUG for platforms with HAVE_VA_ARGS_MACROMatt Valentine-House
after this commit turned it off globally. 888cf28a7e3a07fc0a41688777a40910654005ad Co-authored-by: peterzhu2118 <peter@peterzhu.ca> Notes: Merged: https://github.com/ruby/ruby/pull/4073
2021-01-26Fix RGENGC CHECK MODE >= 4Matt Valentine-House
[A previous commit](b59077eecf912a16efefc0256f6e94a000ce3888) removes some macro definitions that are used when RGENGC_CHECK_MODE >=4 because they were using data stored against objspace, which is not ractor safe This commit reinstates those macro definitions, using the current ractor Co-authored-by: peterzhu2118 <peter@peterzhu.ca> Notes: Merged: https://github.com/ruby/ruby/pull/4074
2021-01-23gc.c: stop overflow check on emscripten buildYusuke Endoh
2021-01-22check is_incremental_marking() againKoichi Sasada
is_incremental_marking() can be changed after checking the flag without locking, especially on `GC.stress = true`.
2021-01-21Fix more assumptions about the read barrierAaron Patterson
This is a continuation of 0130e17a410d60a10e7041ce98748b8de6946971. We need to always use the read barrier
2021-01-21Always enabled read barrier even on GC.compactAaron Patterson
Some objects can survive the GC before compaction, but get collected in the second compaction. This means we could have objects reference T_MOVED during "free" in the second, compacting GC. If that is the case, we need to invalidate those "moved" addresses. Invalidation is done via read barrier, so we need to make sure the read barrier is active even during `GC.compact`. This also means we don't actually need to do one GC before compaction, we can just do the compaction and GC in one step.
2021-01-13fix ASAN errorsAaron Patterson
Notes: Merged: https://github.com/ruby/ruby/pull/4067
2021-01-09gc fix typo for the timer instruction for ARM64.David CARLIER
Notes: Merged: https://github.com/ruby/ruby/pull/4044
2021-01-06show more info about imemo_callcacheKoichi Sasada
Notes: Merged: https://github.com/ruby/ruby/pull/4030
2021-01-05[DOC] Fix grammar: "is same as" -> "is the same as"Marcus Stollsteimer
2021-01-05enable constant cache on ractorsKoichi Sasada
constant cache `IC` is accessed by non-atomic manner and there are thread-safety issues, so Ruby 3.0 disables to use const cache on non-main ractors. This patch enables it by introducing `imemo_constcache` and allocates it by every re-fill of const cache like `imemo_callcache`. [Bug #17510] Now `IC` only has one entry `IC::entry` and it points to `iseq_inline_constant_cache_entry`, managed by T_IMEMO object. `IC` is atomic data structure so `rb_mjit_before_vm_ic_update()` and `rb_mjit_after_vm_ic_update()` is not needed. Notes: Merged: https://github.com/ruby/ruby/pull/4022
2020-12-29Stop managing valid class serialsTakashi Kokubun
`mjit_valid_class_serial_p` has no longer been used since b9007b6c548.
2020-12-28Adjusted styles [ci skip]Nobuyoshi Nakada
2020-12-26Fixed leaked global symbolsNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/4003
2020-12-25define RGENGC_DEBUG_ENABLED() as 0Koichi Sasada
on RUBY_DEVEL==0 and !HAVE_VA_ARGS_MACRO. gc_report() is always enabled on such configuration (maybe it is a bug) so disable RGENGC_DEBUG_ENABLED().
2020-12-23Use rb_init_identtable instead of direct use of rb_hashtype_identNobuyoshi Nakada
2020-12-22separate rb_ractor_pub from rb_ractor_tKoichi Sasada
separate some fields from rb_ractor_t to rb_ractor_pub and put it at the beggining of rb_ractor_t and declare it in vm_core.h so vm_core.h can access rb_ractor_pub fields. Now rb_ec_ractor_hooks() is a complete inline function and no MJIT related issue. Notes: Merged: https://github.com/ruby/ruby/pull/3943
2020-12-18finalizing should be checked before VM lockKoichi Sasada
2020-12-18Removed a moved local variableNobuyoshi Nakada
2020-12-18need to sync gc_finalize_deferredKoichi Sasada
gc_finalize_deferred() runs finalizers and it accesses objspace, so it need to sync.
2020-12-18Removed old GC.stat keys deprecated since 2.2Nobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/3921
2020-12-18Removed old GC tuning environment variables deprecated since 2.1Nobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/3921
2020-12-18acquire VM lock on gc_verify_internal_consistency()Koichi Sasada
There is a case to call this function without VM lock acquiring.
2020-12-18add explicit checkKoichi Sasada
To debug this issue: https://rubyci.org/logs/rubyci.s3.amazonaws.com/solaris10-gcc/ruby-master/log/20201217T220004Z.fail.html.gz
2020-12-18gc_verify_internal_consistency() needs barrierKoichi Sasada
gc_verify_internal_consistency() accesses all slots (objects) so all ractors should stop before starting this function.
2020-12-17sync obj_to_id_tblKoichi Sasada
objspace->obj_to_id_tbl is a shared table so we need to synchronize it to access. Notes: Merged: https://github.com/ruby/ruby/pull/3924
2020-12-17reduce barrier counts for GC eventsKoichi Sasada
mark needs barrier (stop other ractors), but other GC events don't need barriers (maybe...). Notes: Merged: https://github.com/ruby/ruby/pull/3923
2020-12-17relax synchronization on WBKoichi Sasada
Current synchronization is too much on write barriers. Notes: Merged: https://github.com/ruby/ruby/pull/3918
2020-12-17add debug counters for gc start eventsKoichi Sasada
2020-12-17RGENGC_PROFILE=0Koichi Sasada
Enabled this flag, maybe accidentally.