| Age | Commit message (Collapse) | Author |
|
|
|
Make it lazy and add a hash specialization in addition to the array
specialization.
|
|
Lazily compile out a chain of checks for different known classes and
whether `self` embeds its ivars or not.
* Remove trailing whitespaces
* Get proper addresss in Capstone disassembly
* Lowercase address in Capstone disassembly
Capstone uses lowercase for jump targets in generated listings. Let's
match it.
* Use the same successor in getivar guard chains
Cuts down on duplication
* Address reviews
* Fix copypasta error
* Add a comment
|
|
|
|
When a BOP is redefined, the BOP redefinition callback will invalidate
any blocks that depend on BOPS. This allows us to eliminate runtime
checks for BOP redefinition.
|
|
|
|
|
|
|
|
CI runs on some platforms uJIT doesn't support. They don't have
UJIT.install_entry. Maybe we want something like `install_entry_if_possible`.
|
|
Co-authored-by: Maxime Chevalier-Boisvert <maximechevalierb@gmail.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
env_copy() uses rb_ary_delete_at() with a loop counting up while
iterating through the list of read only locals. rb_ary_delete_at() can
shift elements in the array to an index lesser than the loop index,
causing locals to be missed and set to Qfalse in the returned
environment.
Iterate through the locals in reverse instead, this way the shifting
never happens for locals that are yet to be visited and we process all
the locals in the array.
[Bug #18023]
Notes:
Merged: https://github.com/ruby/ruby/pull/4940
Merged-By: XrXr
|
|
rb_objspace_reachable_objects_from requires that the GC not be active.
Since the Ractor barrier is not executed for incremental sweeping,
Ractor may call rb_objspace_reachable_objects_from after sweeping
has started to share objects. This causes a crash that looks like
the following:
```
<internal:ractor>:627: [BUG] rb_objspace_reachable_objects_from() is not supported while during_gc == true
```
Co-authored-by: Vinicius Stock <vinicius.stock@shopify.com>
Notes:
Merged: https://github.com/ruby/ruby/pull/4755
|
|
|
|
|
|
If the GC has been disabled we need to re-enable it so we can evacuate
the transient heap.
Fixes https://bugs.ruby-lang.org/issues/17985
[Bug #17985] [ruby-core:104260]
Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org>
Notes:
Merged: https://github.com/ruby/ruby/pull/4596
|
|
Skip the assertion to test the `Ractor.select` from multiple ractors that rarely
fails on Travis arm64.
See <https://bugs.ruby-lang.org/issues/17878>.
Notes:
Merged: https://github.com/ruby/ruby/pull/4518
|
|
Defer making ractor stdio until ractor started.
Before ractor started, created objects belong to the caller ractor
instead of the created ractor.
Notes:
Merged: https://github.com/ruby/ruby/pull/4241
Merged-By: nobu <nobu@ruby-lang.org>
|
|
Ractor.allocate and Ractor#dup should not be allowed like Thread.
[Bug #17642]
Notes:
Merged: https://github.com/ruby/ruby/pull/4198
|
|
Fixed the race condition when replacing `freelist` entry with its
chained next element. At acquiring an entry, hold the entry once
with the special value, then release by replacing it with the next
element again after acquired. If another thread is holding the
same entry at that time, spinning until the entry gets released.
Co-Authored-By: Koichi Sasada <ko1@atdot.net>
Notes:
Merged: https://github.com/ruby/ruby/pull/4167
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/4142
|
|
Ractor.yield(obj, move: true) and
Ractor.select(..., yield_value: obj, move: true) tried to yield a
value with move semantices, but if the trial is faild, the obj
should not become a moved object.
To keep this rule, `wait_moving` wait status is introduced.
New yield/take process:
(1) If a ractor tried to yield (move:true), make taking racotr's
wait status `wait_moving` and make a moved object by
`ractor_move(obj)` and wakeup taking ractor.
(2) If a ractor tried to take a message from a ractor waiting fo
yielding (move:true), wakeup the ractor and wait for (1).
Notes:
Merged: https://github.com/ruby/ruby/pull/4105
|
|
because the name "MJIT" is an internal code name, it's inconsistent with
--jit while they are related to each other, and I want to discourage future
JIT implementation-specific (e.g. MJIT-specific) APIs by this rename.
[Feature #17490]
|
|
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
|
|
It returns main Ractor, like Thread.main.
[Feature #17418]
Notes:
Merged: https://github.com/ruby/ruby/pull/3963
|
|
This API is similar to plain old Thread#[]/Fiber#[] interface
with symbol key.
Notes:
Merged: https://github.com/ruby/ruby/pull/3962
|
|
TracePoint should be ractor-local because the Proc can violate the
Ractor-safe.
Notes:
Merged: https://github.com/ruby/ruby/pull/3943
|
|
To check shareable-ness, rb_ractor_shareable_p() is needed
for Class/Module objects isntead of checking flags.
|
|
Ractor.make_shareable(obj) tries to make obj a shareable object
by changing the attribute of obj and traversable objects from obj
(mainly freeze them).
"copy: true" option is more conservative approach by make deep
copied object and make it sharable. It doesn't affect any existing
objects.
|
|
|
|
Instead of Ractor.receive, Ractor.receive_if can provide a pattern
by a block and you can choose the receiving message.
[Feature #17378]
Notes:
Merged: https://github.com/ruby/ruby/pull/3862
|
|
It's not working
http://ci.rvm.jp/results/trunk-mjit@phosphorus-docker/3288206. I'm
debugging why.
|
|
|
|
Because Ruby often fails to dump a C backtrace.
|
|
trap can accept blopck/Proc and it can violate Rator isolation,
so the Proc should be isolatable when trap is used on non-main ractor.
Notes:
Merged: https://github.com/ruby/ruby/pull/3888
|
|
Instance variables of sharable objects are accessible only from
main ractor, so we need to check it correctly.
Notes:
Merged: https://github.com/ruby/ruby/pull/3887
|
|
|
|
ObjectSpace._id2ref(id) can return any objects even if they are
unshareable, so this patch raises RangeError if it runs on multi-ractor
mode and the found object is unshareable.
Notes:
Merged: https://github.com/ruby/ruby/pull/3878
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/3694
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/3841
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/3848
|
|
Thread's interrupt set Ractor's wakeup_status as interrupted, but
the status remains next Ractor communication API. This patch makes
to ignore the previous interrupt state.
[Bug #17366]
Also this patch solves the Thread#kill and Ractor#take issues.
|