aboutsummaryrefslogtreecommitdiffstats
path: root/bootstraptest
Commit message (Collapse)AuthorAgeFilesLines
* Removed deprecated Time#succNobuyoshi Nakada2020-12-071-1/+0
|
* Ractor.select requires an argument or yield_valueMarc-Andre Lafortune2020-12-071-0/+9
|
* fix Thread's interrupt and Ractor#take issueKoichi Sasada2020-12-071-0/+20
| | | | | | | | | 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.
* Guard all accesses to RubyVM::MJIT with defined?(RubyVM::MJIT) &&Benoit Daloze2020-12-041-2/+2
| | | | * Otherwise those tests, etc cannot run on alternative Ruby implementations.
* should not use rb_str_modify(), tooKoichi Sasada2020-12-011-1/+9
| | | | | | Same as 8247b8edde, should not use rb_str_modify() here. https://bugs.ruby-lang.org/issues/17343#change-88858
* should not use rb_ary_modify()Koichi Sasada2020-12-011-0/+7
| | | | | | | | | | | 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
* Fix `Ractor.make_shareable` for recursive structures with unfreezable componentsMarc-Andre Lafortune2020-11-301-0/+11
| | | | Followup to #3823
* Fixed Ractor.shareable? on cross-recursive objects [Bug #17344]Nobuyoshi Nakada2020-11-301-0/+9
|
* Skip test_ractor.rb:137 for --jit-min-calls=5Takashi Kokubun2020-11-241-1/+1
| | | | | | | | | It's failing like http://ci.rvm.jp/results/trunk-mjit-wait@phosphorus-docker/3270373 but I have no bandwidth to fix it for now. We're still checking --jit-wait (without --jit-min-calls=5) on GitHub Actions.
* Report a more detailed situation of test_ractor.rb:137Takashi Kokubun2020-11-241-2/+2
| | | | | This test has been very unstable. I'd like to instantly know whether it's always failing or random when I look at a CI failure output.
* remove Ractor#closeKoichi Sasada2020-11-111-2/+2
| | | | | | | | | | | | 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.
* ignore yield_atexit if outgoing port is closedKoichi Sasada2020-11-111-0/+10
| | | | | If outgoing_port is closed, Ractor.yield never successes. [Bug #17310]
* Threads in a ractor will be killed with the ractorKoichi Sasada2020-11-111-1/+33
| | | | | If a terminating ractor has child threads, then kill all child threads.
* Copy for Ractor.send() without marshal.Koichi Sasada2020-11-021-1/+1
| | | | Now copying objects do not need marshal protocol.
* add a test of define_method with shareable Proc.Koichi Sasada2020-10-301-0/+11
| | | | | | | 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.
* Ractor.make_shareable(a_proc)Koichi Sasada2020-10-301-0/+27
| | | | | | | | | | | | | | | | | | | 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]
* Use 'shareable' with an 'e' [ci skip]Marc-Andre Lafortune2020-10-251-8/+8
|
* Tweak a few Ractor tests that were missing comments [ci skip]Marc-Andre Lafortune2020-10-251-0/+4
|
* Remove trailing whitespace [ci skip]Marc-Andre Lafortune2020-10-251-1/+1
|
* allow to access ivars of frozen shareable objectsKoichi Sasada2020-10-221-0/+12
| | | | | | 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.
* Ractor.make_shareable(obj)Koichi Sasada2020-10-211-0/+74
| | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* fix conditionKoichi Sasada2020-10-201-1/+1
|
* skip `echo foo` on SolarisKoichi Sasada2020-10-201-1/+1
| | | | | | | | | | | | | | | | | 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>' ```
* ObjectSpace.each_object with RactorsKoichi Sasada2020-10-201-0/+9
| | | | | | | 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]
* Some global variables can be accessed from ractorsKoichi Sasada2020-10-201-0/+59
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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, ```
* sync generic_ivtblKoichi Sasada2020-10-141-0/+17
| | | | | | | | | 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.
* sync enc_table and rb_encoding_listKoichi Sasada2020-10-141-0/+14
| | | | | | | | | | | | | | | | | 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.
* Add Ractor#receive and Ractor.receive and use it in all placesBenoit Daloze2020-10-101-24/+24
| | | | * Keep Ractor#recv/Ractor.recv as an alias for now.
* fix typo [ci skip]Koichi Sasada2020-09-271-2/+2
|
* freeze all Range objects.v3_0_0_preview1Koichi Sasada2020-09-251-4/+3
| | | | | Matz want to try to freeze all Range objects. [Feature #15504]
* prohibi method call by defined_method in other racotrsKoichi Sasada2020-09-251-0/+11
| | | | We can not call a non-isolated Proc in multiple ractors.
* Range is based on Struct.Koichi Sasada2020-09-251-0/+4
| | | | Range can be shareable because it is implemented by Struct.
* Frozen Struct can be shareable.Koichi Sasada2020-09-251-0/+6
| | | | | A frozen Struct object which refers to shareable objects should be shareable.
* refactoring a test code.Koichi Sasada2020-09-251-17/+49
| | | | make a test more clear.
* Ractor.yield should raise if out-port is closedKoichi Sasada2020-09-251-0/+21
| | | | | Ractor.yield should raise Ractor::ClosedError if current Ractor's outgoing-port is closed.
* frozen T_OBJECT can be shareable.Koichi Sasada2020-09-251-0/+27
| | | | | If an T_OBJECT object is frozen and all ivars are shareable, the object should be shareable.
* Ractor#close_outgoping cancel Ractor.yieldKoichi Sasada2020-09-251-0/+1
| | | | | | 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).
* Remove test for putiseq insnMichael Lindley2020-09-241-1/+0
| | | putiseq was removed from instruction set in 2b5bb8a0
* Fulfill missing tests and stabilize testsQuang-Minh Nguyen2020-09-201-22/+126
|
* Validate name during initializationQuang-Minh Nguyen2020-09-201-17/+33
|
* Add status to Ractor#inspectQuang-Minh Nguyen2020-09-201-0/+21
|
* Interpolated strings are no longer frozen with frozen-string-literal: trueBenoit Daloze2020-09-151-2/+0
| | | | | * Remove freezestring instruction since this was the only usage for it. * [Feature #17104]
* sync fstring poolKoichi Sasada2020-09-151-0/+17
| | | | fstring pool should be sync with other Ractors.
* Fix typos [ci skip]Kazuhiro NISHIYAMA2020-09-131-2/+2
|
* don't use toplevel returnKoichi Sasada2020-09-041-2/+5
| | | | | Toplevel return is supported after Ruby 2.4, so don't use it for older BASERUBY.
* skip Ractor tests on Compiler testsKoichi Sasada2020-09-031-1/+6
| | | | | | This implementation has memory corruption errors so and it causes BUG on rare occasions. This commit skips suspect tests on Github actions Compiler tests.
* Introduce Ractor mechanism for parallel executionKoichi Sasada2020-09-031-0/+516
| | | | | | | | | | | | | | | | 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.
* display stderr output even if core dump filesKoichi Sasada2020-07-291-2/+8
| | | | | | 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.
* Remove obsoleted opt_call_c_function insn (#3232)Takashi Kokubun2020-06-171-2/+0
| | | | | * Remove obsoleted opt_call_c_function insn * Keep opt_call_c_function with DEFINE_INSN_IF
* Make proc/Proc.new without block an error instead of warningJeremy Evans2020-06-102-6/+6
| | | | The warning for these was added in 2.7.