Cannot instanciate Http::Parser in Ractor
tagomoris opened this issue · comments
The exception below happened:
Unexpected error: ractor unsafe method called from not main ractor
/Users/tagomoris/gh/right_speed/lib/right_speed/handler.rb:91:in `initialize'
/Users/tagomoris/gh/right_speed/lib/right_speed/handler.rb:91:in `new'
/Users/tagomoris/gh/right_speed/lib/right_speed/handler.rb:91:in `initialize'
/Users/tagomoris/gh/right_speed/lib/right_speed/handler.rb:12:in `new'
/Users/tagomoris/gh/right_speed/lib/right_speed/handler.rb:12:in `session'
/Users/tagomoris/gh/right_speed/lib/right_speed/worker/reader.rb:14:in `block in run'
Code called in a Ractor
@parser = Http::Parser.new(self)
Is that because Http::Parser
is a native-code library?
What is the "Ractor-safe" method? No documents https://docs.ruby-lang.org/en/master/Ractor.html
In the Ruby code, call_cfunc_*
functions always call ractor_unsafe_check();
at first, and it raises the exception if it's not in the main ractor.
We can use TracePoint's :c_call
event to find such method calls.