From: eregontp@... Date: 2020-09-29T17:10:31+00:00 Subject: [ruby-core:100221] [Ruby master Bug#17203] Logger::Formatter won't work with non main Ractor Issue #17203 has been updated by Eregon (Benoit Daloze). Assignee set to ko1 (Koichi Sasada) Since `$$` returns a (read-only) Integer, it seems harmless to let Ractors read it. Although I think `Process.pid` is nicer than `$$` :) `$stdout` OTOH should not be possible to access from non-main Ractor, no matter the access path. It's a mutable object, if it's shared between Ractors it can lead to segfaults. ---------------------------------------- Bug #17203: Logger::Formatter won't work with non main Ractor https://bugs.ruby-lang.org/issues/17203#change-87810 * Author: maciej.mensfeld (Maciej Mensfeld) * Status: Open * Priority: Normal * Assignee: ko1 (Koichi Sasada) * ruby -v: ruby 3.0.0preview1 (2020-09-25 master 0096d2b895) [x86_64-linux] * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN ---------------------------------------- ``` ruby class Rogger < Ractor def self.new super do # STDOUT cannot be referenced but $stdout can logger = ::Logger.new($stdout) # Run the requested operations on our logger instance while data = recv logger.public_send(data[0], *data[1]) end end end # Really cheap logger API :) def method_missing(m, *args, &_block) self << [m, *args] end end class Rails LOGGER = Rogger.new def self.logger LOGGER end end Ractor.new do Rails.logger.info "Hello" end ``` running this ends up with: ```bash terminated with exception (report_on_exception is true): ruby/3.0.0/logger/formatter.rb:15:in `call': can not access global variables $$ from non-main Ractors (RuntimeError) from ruby/3.0.0/logger.rb:586:in `format_message' from ruby/3.0.0/logger.rb:476:in `add' from ruby/3.0.0/logger.rb:529:in `info' from test.rb:23:in `public_send' from test.rb:23:in `block in new' ``` however the same with fixed formatter works. PR: https://github.com/ruby/ruby/pull/3600 All of the code examples are here: https://mensfeld.pl/2020/09/building-a-ractor-based-logger-that-will-work-with-non-ractor-compatible-code/ -- https://bugs.ruby-lang.org/ Unsubscribe: