SecureRandom lazily defines get_random. Accessing the mutex to define
the get_random method is not supported inside a Ractor. This commit
defines gen_random when securerandom is required and makes it
suppore Ractor (as well as thread safe).
$ make runruby
./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb --extout=.ext -- --disable-gems ./test.rb
<internal:ractor>:38: warning: Ractor is experimental, and the behavior may change in future versions of Ruby! Also there are many implementation issues.
/Users/aaron/git/ruby/lib/securerandom.rb:94:in `gen_random': can not access instance variables of classes/modules from non-main Ractors (RuntimeError)
<internal:ractor>:124:in `take': thrown by remote Ractor. (Ractor::RemoteError)
from ./test.rb:9:in `<main>'
/Users/aaron/git/ruby/lib/securerandom.rb:94:in `gen_random': can not access instance variables of classes/modules from non-main Ractors (RuntimeError)
from /Users/aaron/git/ruby/lib/securerandom.rb:155:in `random_bytes'
from /Users/aaron/git/ruby/lib/securerandom.rb:176:in `hex'
from ./test.rb:5:in `block (2 levels) in <main>'
from ./test.rb:4:in `loop'
from ./test.rb:4:in `block in <main>'
make: *** [runruby] Error
After this commit:
$ make runruby
./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb --extout=.ext -- --disable-gems ./test.rb
<internal:ractor>:38: warning: Ractor is experimental, and the behavior may change in future versions of Ruby! Also there are many implementation issues.
"3fc8885157e3911bab4b5d7619bb0308"
Make SecureRandom support Ractor
SecureRandom lazily defines
get_random
. Accessing the mutex to definethe
get_random
method is not supported inside a Ractor. This commitdefines
gen_random
whensecurerandom
is required and makes itsuppore Ractor (as well as thread safe).
Here is a test program:
Before this commit:
After this commit: