Age | Commit message (Collapse) | Author |
|
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 <[email protected]>
Notes:
Merged: https://github.com/ruby/ruby/pull/4596
|
|
Notes:
Merged-By: k0kubun <[email protected]>
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/4414
|
|
|
|
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 <[email protected]>
|
|
Ractor.allocate and Ractor#dup should not be allowed like Thread.
[Bug #17642]
Notes:
Merged: https://github.com/ruby/ruby/pull/4198
|
|
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
|
|
alen was number of rs, but it should be actions number
(taking ractors + receiving + yielding).
Notes:
Merged: https://github.com/ruby/ruby/pull/4105
|
|
Use ractor_wakeup() for same code.
|
|
expose some C-APIs to try to make ractor utilities on external gems.
* add
* rb_ractor_local_storage_value_lookup() to check availability
* expose
* rb_ractor_make_shareable()
* rb_ractor_make_shareable_copy()
* rb_proc_isolate() (not public)
* rb_proc_isolate_bang() (not public)
* rb_proc_ractor_make_shareable() (not public)
|
|
to reset main ractor at fork().
|
|
With locking a ractor, rb_ary_push() can call RB_VM_LOCK_ENTER()
and it violates an assertion: should not acquire ractor-lock.
|
|
* Fixed use of rb_ractor_shareable_p
* Raise Ractor::IsolationError
Notes:
Merged: https://github.com/ruby/ruby/pull/3950
|
|
When `literal`, check if the literal about to be assigned to a
constant is ractor-shareable, otherwise raise `Ractor::Error` at
runtime instead of `SyntaxError`.
Notes:
Merged: https://github.com/ruby/ruby/pull/3950
|
|
rb_warn can produce T_HASA object and it should not use
transient heap.
|
|
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/3960
|
|
This API is similar to plain old Thread#[]/Fiber#[] interface
with symbol key.
Notes:
Merged: https://github.com/ruby/ruby/pull/3962
|
|
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
|
|
TracePoint should be ractor-local because the Proc can violate the
Ractor-safe.
Notes:
Merged: https://github.com/ruby/ruby/pull/3943
|
|
Ractor has several restrictions to keep each ractor being isolated
and some operation such as `CONST="foo"` in non-main ractor raises
an exception. This kind of operation raises an error but there is
confusion (some code raises RuntimeError and some code raises
NameError).
To make clear we introduce Ractor::IsolationError which is raised
when the isolation between ractors is violated.
Notes:
Merged: https://github.com/ruby/ruby/pull/3957
|
|
Because unfreeze Ractor::MovedObject at
https://github.com/ruby/ruby/commit/76e88480371469400346fca609efe67096813915
|
|
It should raise an error if the same thread tris to call
receive/receive_if.
Notes:
Merged: https://github.com/ruby/ruby/pull/3949
|
|
from rb_ractor_make_copy_shareable().
|
|
To check shareable-ness, rb_ractor_shareable_p() is needed
for Class/Module objects isntead of checking flags.
|
|
|
|
Notes:
Merged-By: marcandre <[email protected]>
|
|
Matz prefers to unfreeze the class.
[Feature #17401]
|
|
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.
|
|
features
This adds rb_category_compile_warn in order to emit compiler warnings
with categories. Note that Ripper currently ignores the category
for these warnings, but by default it ignores the warnings completely,
so this shouldn't matter.
Notes:
Merged: https://github.com/ruby/ruby/pull/3917
|
|
ractor_sleep() can remain wait.status by interrupt, so that this
patch handles more correctly.
This patch fixed this kind of assertion failures:
Assertion Failed: ../src/ractor.c:1332:ractor_yield_atexit:cr->sync.wait.status == wait_none
|
|
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
|
|
|
|
separate synchronization data and ractor local data.
Notes:
Merged: https://github.com/ruby/ruby/pull/3858
|
|
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.
|
|
On windows, MJIT doesn't work without this patch because of
the declaration of ruby_single_main_ractor. This patch fix this
issue and move the definition of it from ractor.c to vm.c to locate
near place of ruby_current_vm_ptr.
Notes:
Merged: https://github.com/ruby/ruby/pull/3842
|
|
Now object allocation requires VM global lock to synchronize objspace.
However, of course, it introduces huge overhead.
This patch caches some slots (in a page) by each ractor and use cached
slots for object allocation. If there is no cached slots, acquire the global lock
and get new cached slots, or start GC (marking or lazy sweeping).
Notes:
Merged: https://github.com/ruby/ruby/pull/3842
|
|
accessing theap needs complicating synchronization but it reduce
performance on multi-ractor mode. So simply stop using theap
on multi-ractor mode. In future, theap should be replaced with
more cleaver memory strategy.
Notes:
Merged: https://github.com/ruby/ruby/pull/3842
|
|
ruby_multi_ractor was a flag that indicates the interpreter doesn't
make any additional ractors (single ractor mode).
Instead of boolean flag, ruby_single_main_ractor pointer is introduced
which keeps main ractor's pointer if single ractor mode. If additional
ractors are created, ruby_single_main_ractor becomes NULL.
Notes:
Merged: https://github.com/ruby/ruby/pull/3842
|
|
`i` should not be used here because `i` will be `alen` when
jumped here by "goto restart".
|
|
for an MJIT worker thread. We can't do it because its GET_EC() returns
NULL.
|
|
Same as 8247b8edde, should not use rb_str_modify() here.
https://bugs.ruby-lang.org/issues/17343#change-88858
Notes:
Merged: https://github.com/ruby/ruby/pull/3833
|
|
C extensions can violate the ractor-safety, so only ractor-safe
C extensions (C methods) can run on non-main ractors.
rb_ext_ractor_safe(true) declares that the successive
defined methods are ractor-safe. Otherwiwze, defined methods
checked they are invoked in main ractor and raise an error
if invoked at non-main ractors.
[Feature #17307]
Notes:
Merged: https://github.com/ruby/ruby/pull/3824
|
|
ractor_copy() used rb_ary_modify() to make sure this array is not
sharing anything, but it also checks frozen flag. So frozen arrays
raises an error. To solve this issue, this patch introduces new
function rb_ary_cancel_sharing() which makes sure the array does not
share another array and it doesn't check frozen flag.
[Bug #17343]
A test is quoted from https://github.com/ruby/ruby/pull/3817
Notes:
Merged: https://github.com/ruby/ruby/pull/3831
|
|
To manage ractor-local data for C extension, the following APIs
are defined.
* rb_ractor_local_storage_value_newkey
* rb_ractor_local_storage_value
* rb_ractor_local_storage_value_set
* rb_ractor_local_storage_ptr_newkey
* rb_ractor_local_storage_ptr
* rb_ractor_local_storage_ptr_set
At first, you need to create a key of storage by
rb_ractor_local_(value|ptr)_newkey().
For ptr storage, it accepts the type of storage,
how to mark and how to free with ractor's lifetime.
rb_ractor_local_storage_value/set are used to access a VALUE
and rb_ractor_local_storage_ptr/set are used to access a pointer.
random.c uses this API.
Notes:
Merged: https://github.com/ruby/ruby/pull/3822
|
|
Followup to #3823
Notes:
Merged: https://github.com/ruby/ruby/pull/3827
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/3823
Merged-By: nobu <[email protected]>
|
|
|
|
default_rand can points a Bignum seed, so it should be marked.
|
|
Random generators are not Ractor-safe, so we need to prepare
per-ractor default random genearators. This patch set
`Random::DEFAULT = Randm` (not a Random instance, but the Random
class) and singleton methods like `Random.rand()` use a per-ractor
random generator.
[Feature #17322]
Notes:
Merged: https://github.com/ruby/ruby/pull/3813
|