summaryrefslogtreecommitdiff
path: root/bootstraptest
AgeCommit message (Collapse)Author
2020-11-11remove Ractor#closeKoichi Sasada
close_incoming by antoher ractor means there is no other messages will be sent to the ractor, so Ractor.receive will block forever, and it should raise and stop. close_outgoing by antoher ractor means, ... I don't have good idea to use it. It can be a private method. Ractor#close calls both, but it does not make sense to call different purpose methods, so I remove it. Notes: Merged: https://github.com/ruby/ruby/pull/3759
2020-11-11ignore yield_atexit if outgoing port is closedKoichi Sasada
If outgoing_port is closed, Ractor.yield never successes. [Bug #17310] Notes: Merged: https://github.com/ruby/ruby/pull/3755
2020-11-11Threads in a ractor will be killed with the ractorKoichi Sasada
If a terminating ractor has child threads, then kill all child threads. Notes: Merged: https://github.com/ruby/ruby/pull/3754
2020-11-02Copy for Ractor.send() without marshal.Koichi Sasada
Now copying objects do not need marshal protocol. Notes: Merged: https://github.com/ruby/ruby/pull/3728
2020-10-30add a test of define_method with shareable Proc.Koichi Sasada
a method defined by define_method with normal Proc can not cross ractors because the normal Proc is not shareable. However, shareable Proc can be crossed between ractors, so the method with shareable Proc should be called correctly.
2020-10-30Ractor.make_shareable(a_proc)Koichi Sasada
Ractor.make_shareable() supports Proc object if (1) a Proc only read outer local variables (no assignments) (2) read outer local variables are shareable. Read local variables are stored in a snapshot, so after making shareable Proc, any assignments are not affeect like that: ```ruby a = 1 pr = Ractor.make_shareable(Proc.new{p a}) pr.call #=> 1 a = 2 pr.call #=> 1 # `a = 2` doesn't affect ``` [Feature #17284] Notes: Merged: https://github.com/ruby/ruby/pull/3722
2020-10-25Use 'shareable' with an 'e' [ci skip]Marc-Andre Lafortune
2020-10-25Tweak a few Ractor tests that were missing comments [ci skip]Marc-Andre Lafortune
2020-10-25Remove trailing whitespace [ci skip]Marc-Andre Lafortune
2020-10-22allow to access ivars of frozen shareable objectsKoichi Sasada
Accessing a shareable object is prohibitted because it can cause race condition, but if the shareable object is frozen, there is no problem to access ivars.
2020-10-21Ractor.make_shareable(obj)Koichi Sasada
Introduce new method Ractor.make_shareable(obj) which tries to make obj shareable object. Protocol is here. (1) If obj is shareable, it is shareable. (2) If obj is not a shareable object and if obj can be shareable object if it is frozen, then freeze obj. If obj has reachable objects (rs), do rs.each{|o| Ractor.make_shareable(o)} recursively (recursion is not Ruby-level, but C-level). (3) Otherwise, raise Ractor::Error. Now T_DATA is not a shareable object even if the object is frozen. If the method finished without error, given obj is marked as a sharable object. To allow makng a shareable frozen T_DATA object, then set `RUBY_TYPED_FROZEN_SHAREABLE` as type->flags. On default, this flag is not set. It means user defined T_DATA objects are not allowed to become shareable objects when it is frozen. You can make any object shareable by setting FL_SHAREABLE flag, so if you know that the T_DATA object is shareable (== thread-safe), set this flag, at creation time for example. `Ractor` object is one example, which is not a frozen, but a shareable object. Notes: Merged: https://github.com/ruby/ruby/pull/3678
2020-10-20fix conditionKoichi Sasada
2020-10-20skip `echo foo` on SolarisKoichi Sasada
On Solaris, it seems to access ENV in ``, so skip it now. ``` stderr output is not empty Exception `NameError' at bootstraptest.tmp.rb:7 - can not access non-sharable objects in constant Object::ENV by non-main Ractor. #<Thread:0x0044cdf0 run> terminated with exception (report_on_exception is true): bootstraptest.tmp.rb:7:in ``': can not access non-sharable objects in constant Object::ENV by non-main Ractor. (NameError) Exception `Ractor::RemoteError' at <internal:ractor>:130 - thrown by remote Ractor. <internal:ractor>:130:in `take': thrown by remote Ractor. (Ractor::RemoteError) from bootstraptest.tmp.rb:55:in `<main>' bootstraptest.tmp.rb:7:in ``': can not access non-sharable objects in constant Object::ENV by non-main Ractor. (NameError) from bootstraptest.tmp.rb:7:in `ractor_local_globals' from bootstraptest.tmp.rb:54:in `block in <main>' ```
2020-10-20ObjectSpace.each_object with RactorsKoichi Sasada
Unshareable objects should not be touched from multiple ractors so ObjectSpace.each_object should be restricted. On multi-ractor mode, ObjectSpace.each_object only iterates shareable objects. [Feature #17270] Notes: Merged: https://github.com/ruby/ruby/pull/3672
2020-10-20Some global variables can be accessed from ractorsKoichi Sasada
Some global variables should be used from non-main Ractors. [Bug #17268] ```ruby # ractor-local (derived from created ractor): debug '$DEBUG' => $DEBUG, '$-d' => $-d, # ractor-local (derived from created ractor): verbose '$VERBOSE' => $VERBOSE, '$-w' => $-w, '$-W' => $-W, '$-v' => $-v, # process-local (readonly): other commandline parameters '$-p' => $-p, '$-l' => $-l, '$-a' => $-a, # process-local (readonly): getpid '$$' => $$, # thread local: process result '$?' => $?, # scope local: match '$~' => $~.inspect, '$&' => $&, '$`' => $`, '$\'' => $', '$+' => $+, '$1' => $1, # scope local: last line '$_' => $_, # scope local: last backtrace '$@' => $@, '$!' => $!, # ractor local: stdin, out, err '$stdin' => $stdin.inspect, '$stdout' => $stdout.inspect, '$stderr' => $stderr.inspect, ``` Notes: Merged: https://github.com/ruby/ruby/pull/3670
2020-10-14sync generic_ivtblKoichi Sasada
generic_ivtbl is a process global table to maintain instance variables for non T_OBJECT/T_CLASS/... objects. So we need to protect them for multi-Ractor exection. Hint: we can make them Ractor local for unshareable objects, but now it is premature optimization. Notes: Merged: https://github.com/ruby/ruby/pull/3655
2020-10-14sync enc_table and rb_encoding_listKoichi Sasada
enc_table which manages Encoding information. rb_encoding_list also manages Encoding objects. Both are accessed/modified by ractors simultaneously so that they should be synchronized. For enc_table, this patch introduced GLOBAL_ENC_TABLE_ENTER/LEAVE/EVAL to access this table with VM lock. To make shortcut, three new global variables global_enc_ascii, global_enc_utf_8, global_enc_us_ascii are also introduced. For rb_encoding_list, we split it to rb_default_encoding_list (256 entries) and rb_additional_encoding_list. rb_default_encoding_list is fixed sized Array so we don't need to synchronized (and most of apps only needs it). To manage 257 or more encoding objects, they are stored into rb_additional_encoding_list. To access rb_additional_encoding_list., VM lock is needed. Notes: Merged: https://github.com/ruby/ruby/pull/3654
2020-10-10Add Ractor#receive and Ractor.receive and use it in all placesBenoit Daloze
* Keep Ractor#recv/Ractor.recv as an alias for now. Notes: Merged: https://github.com/ruby/ruby/pull/3626
2020-09-27fix typo [ci skip]Koichi Sasada
2020-09-25freeze all Range objects.v3_0_0_preview1Koichi Sasada
Matz want to try to freeze all Range objects. [Feature #15504] Notes: Merged: https://github.com/ruby/ruby/pull/3583
2020-09-25prohibi method call by defined_method in other racotrsKoichi Sasada
We can not call a non-isolated Proc in multiple ractors. Notes: Merged: https://github.com/ruby/ruby/pull/3584
2020-09-25Range is based on Struct.Koichi Sasada
Range can be shareable because it is implemented by Struct. Notes: Merged: https://github.com/ruby/ruby/pull/3580
2020-09-25Frozen Struct can be shareable.Koichi Sasada
A frozen Struct object which refers to shareable objects should be shareable. Notes: Merged: https://github.com/ruby/ruby/pull/3580
2020-09-25refactoring a test code.Koichi Sasada
make a test more clear.
2020-09-25Ractor.yield should raise if out-port is closedKoichi Sasada
Ractor.yield should raise Ractor::ClosedError if current Ractor's outgoing-port is closed. Notes: Merged: https://github.com/ruby/ruby/pull/3578
2020-09-25frozen T_OBJECT can be shareable.Koichi Sasada
If an T_OBJECT object is frozen and all ivars are shareable, the object should be shareable. Notes: Merged: https://github.com/ruby/ruby/pull/3575
2020-09-25Ractor#close_outgoping cancel Ractor.yieldKoichi Sasada
Ractor#close_outgoing should cancel waiting Ractor.yield. However, yield a value by the Ractor's block should not cancel (to recognize terminating Ractor, introduce rb_ractor_t::yield_atexit flag). Notes: Merged: https://github.com/ruby/ruby/pull/3572
2020-09-24Remove test for putiseq insnMichael Lindley
putiseq was removed from instruction set in 2b5bb8a0 Notes: Merged: https://github.com/ruby/ruby/pull/3491
2020-09-20Fulfill missing tests and stabilize testsQuang-Minh Nguyen
Notes: Merged: https://github.com/ruby/ruby/pull/3555
2020-09-20Validate name during initializationQuang-Minh Nguyen
Notes: Merged: https://github.com/ruby/ruby/pull/3555
2020-09-20Add status to Ractor#inspectQuang-Minh Nguyen
Notes: Merged: https://github.com/ruby/ruby/pull/3555
2020-09-15Interpolated strings are no longer frozen with frozen-string-literal: trueBenoit Daloze
* Remove freezestring instruction since this was the only usage for it. * [Feature #17104] Notes: Merged: https://github.com/ruby/ruby/pull/3488
2020-09-15sync fstring poolKoichi Sasada
fstring pool should be sync with other Ractors. Notes: Merged: https://github.com/ruby/ruby/pull/3534
2020-09-13Fix typos [ci skip]Kazuhiro NISHIYAMA
2020-09-04don't use toplevel returnKoichi Sasada
Toplevel return is supported after Ruby 2.4, so don't use it for older BASERUBY.
2020-09-03skip Ractor tests on Compiler testsKoichi Sasada
This implementation has memory corruption errors so and it causes BUG on rare occasions. This commit skips suspect tests on Github actions Compiler tests. Notes: Merged: https://github.com/ruby/ruby/pull/3365
2020-09-03Introduce Ractor mechanism for parallel executionKoichi Sasada
This commit introduces Ractor mechanism to run Ruby program in parallel. See doc/ractor.md for more details about Ractor. See ticket [Feature #17100] to see the implementation details and discussions. [Feature #17100] This commit does not complete the implementation. You can find many bugs on using Ractor. Also the specification will be changed so that this feature is experimental. You will see a warning when you make the first Ractor with `Ractor.new`. I hope this feature can help programmers from thread-safety issues. Notes: Merged: https://github.com/ruby/ruby/pull/3365
2020-07-29display stderr output even if core dump filesKoichi Sasada
On btest, stderr messages are not displayed if core files are generated. There is no reason to skip it, so this patch display stderr and check core files.
2020-06-17Remove obsoleted opt_call_c_function insn (#3232)Takashi Kokubun
* Remove obsoleted opt_call_c_function insn * Keep opt_call_c_function with DEFINE_INSN_IF Notes: Merged-By: k0kubun <takashikkbn@gmail.com>
2020-06-10Make proc/Proc.new without block an error instead of warningJeremy Evans
The warning for these was added in 2.7. Notes: Merged: https://github.com/ruby/ruby/pull/3208
2020-04-27Moved already resolved testNobuyoshi Nakada
Couldn't figure out failed/fixed versions.
2020-04-27Removed already resolved test [ci skip]Nobuyoshi Nakada
That bug has been fixed by ec0c394b9eb, and the test has been added by 181ffea5e04.
2020-04-15Added test for `debug_level:` option of `RubyVM::InstructionSequence.compile`Nobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/3033
2020-04-10Turn class variable warnings into exceptionsJeremy Evans
This changes the following warnings: * warning: class variable access from toplevel * warning: class variable @foo of D is overtaken by C into RuntimeErrors. Handle defined?(@@foo) at toplevel by returning nil instead of raising an exception (the previous behavior warned before returning nil when defined? was used). Refactor the specs to avoid the warnings even in older versions. The specs were checking for the warnings, but the purpose of the related specs as evidenced from their description is to test for behavior, not for warnings. Fixes [Bug #14541] Notes: Merged: https://github.com/ruby/ruby/pull/2987
2020-04-09should check pending interrupts correctly.Koichi Sasada
rb_uninterruptible() disables any interrupts using handle_interrupt feature (This function is used by `p`). After this function, pending interrupts should be checked correctly, however there is no chance to setup interrupt flag of working threads, it means that nobody checks pending interrupts. For example, it ignores terminate signal delivered at the end of main thread and program can't stop. This patch set interrupt flag if there are pending interrupts.
2020-03-23disable to show the maximum number of threads.Koichi Sasada
On Deiban 9 environment, the thread tests failed and this maximum threads information can finish up the machine resources. To check it, I turned-off showing this information.
2020-02-11Make yield in singleton class definitions in methods a SyntaxErrorJeremy Evans
This behavior was deprecated in 2.7 and scheduled to be removed in 3.0. Calling yield in a class definition outside a method is now a SyntaxError instead of a LocalJumpError, as well. Notes: Merged: https://github.com/ruby/ruby/pull/2901
2020-01-22Remove special handling of $SAFE and related C-APIsJeremy Evans
These were all deprecated in Ruby 2.7. Notes: Merged: https://github.com/ruby/ruby/pull/2845
2019-12-12Show the failed message tooNobuyoshi Nakada
2019-12-11Show the failed messageNobuyoshi Nakada