From: naruse@... Date: 2019-08-20T06:45:41+00:00 Subject: [ruby-core:94443] [Ruby master Bug#9115] Logger traps all exceptions; breaks Timeout Issue #9115 has been updated by naruse (Yui NARUSE). See the code again before discuss. ```ruby def write(message) begin synchronize do if @shift_age and @dev.respond_to?(:stat) begin check_shift_log rescue warn("log shifting failed. #{$!}") end end begin @dev.write(message) rescue warn("log writing failed. #{$!}") end end rescue Exception => ignored warn("log writing failed. #{ignored}") end end ``` https://github.com/ruby/ruby/blob/5a384e2c08704dc7af9d8d3bdfc475eb8c0723aa/lib/logger/log_device.rb#L29-L48 With the code, the intention of `rescue Exception` is clear. It wants to rescue exceptions which is raised by `synchronize`. And note that `synchronize` is Monitor's and it only raises ThreadError. https://github.com/ruby/ruby/blob/master/lib/monitor.rb I don't understand why it loosely rescues all exceptions. ---------------------------------------- Bug #9115: Logger traps all exceptions; breaks Timeout https://bugs.ruby-lang.org/issues/9115#change-80869 * Author: cphoenix (Chris Phoenix) * Status: Assigned * Priority: Normal * Assignee: sonots (Naotoshi Seo) * Target version: * ruby -v: ruby 2.0.0p247 (2013-06-27) [i386-mingw32] * Backport: ---------------------------------------- Line 577-579 of logger.rb rescue Exception => ignored warn("log writing failed. #{ignored}") end Thus, when the system times out in the middle of writing a log message, it warns "log writing failed. execution expired" and just keeps right on running. This is true in 1.9.3 as well. I haven't looked at older versions. Pardon me while I go grep "rescue Exception" in the entire Ruby codebase, and see whether I can reliably use Timeout at all... OK, you might check out C:\Ruby200\lib\ruby\gems\2.0.0\gems\activerecord-3.2.13\lib\active_record\railties\databases.rake All the other "rescue Exception" seem to re-raise it, except maybe C:\Ruby200\lib\ruby\2.0.0\xmlrpc\server.rb and C:\Ruby200\lib\ruby\gems\2.0.0\gems\activesupport-3.2.13\lib\active_support\callbacks.rb -- https://bugs.ruby-lang.org/ Unsubscribe: