| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
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
|
| |
|
| |
|
|
|
|
|
| |
rb_obj_info(obj) (rp(obj)) doesn't show enough information for
non-iseq methods, so this patch shows more.
|
|
|
|
|
|
| |
check_rvalue_consistency_force() uses is_pointer_to_heap() and
it should be synchronized with other ractors.
[Bug #17636]
|
|
|
|
|
|
| |
NEWOBJ event is called without clearing RVALUE values (v1, v2, v3).
This patch clear them before NEWOBJ tracepoint internal hook.
[Bug #17599]
|
|
|
|
|
|
| |
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]
|
| |
|
|
|
|
| |
This if statement is not reachable because `was_compacting` cannot be true when `heap->compact_cursor` is NULL.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
`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.
|
| |
|
| |
|
|
|
|
|
| |
It is unable where unaligned word access is disallowed and
`double` is wider than pointers.
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
Co-Authored-By: Matt Valentine-House <31869+eightbitraptor@users.noreply.github.com>
|
|
|
|
|
|
|
|
| |
after this commit turned it off globally.
888cf28a7e3a07fc0a41688777a40910654005ad
Co-authored-by: peterzhu2118 <peter@peterzhu.ca>
|
|
|
|
|
|
|
|
| |
[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>
|
| |
|
|
|
|
|
| |
is_incremental_marking() can be changed after checking the
flag without locking, especially on `GC.stress = true`.
|
|
|
|
|
| |
This is a continuation of 0130e17a410d60a10e7041ce98748b8de6946971. We
need to always use the read barrier
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
`mjit_valid_class_serial_p` has no longer been used since b9007b6c548.
|
| |
|
| |
|
|
|
|
|
|
|
| |
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().
|
| |
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
|
|
|
|
| |
gc_finalize_deferred() runs finalizers and it accesses objspace,
so it need to sync.
|
| |
|
| |
|
|
|
|
| |
There is a case to call this function without VM lock acquiring.
|
|
|
|
|
| |
To debug this issue:
https://rubyci.org/logs/rubyci.s3.amazonaws.com/solaris10-gcc/ruby-master/log/20201217T220004Z.fail.html.gz
|
|
|
|
|
| |
gc_verify_internal_consistency() accesses all slots (objects) so
all ractors should stop before starting this function.
|
|
|
|
|
| |
objspace->obj_to_id_tbl is a shared table so we need to synchronize
it to access.
|
|
|
|
|
| |
mark needs barrier (stop other ractors), but other GC events don't need
barriers (maybe...).
|
|
|
|
| |
Current synchronization is too much on write barriers.
|
| |
|
|
|
|
| |
Enabled this flag, maybe accidentally.
|