Monitor owner state check correctly.

Monitor can be owned at the beginning of this method.
This commit is contained in:
Koichi Sasada 2019-11-12 09:35:26 +09:00
parent 2407e89725
commit 4a30fabfcf

View File

@ -32,6 +32,7 @@ module Kernel
# that file has already been loaded is preserved.
def require(path)
monitor_owned = RUBYGEMS_ACTIVATION_MONITOR.mon_owned?
RUBYGEMS_ACTIVATION_MONITOR.enter
path = path.to_path if path.respond_to? :to_path
@ -166,7 +167,7 @@ module Kernel
raise load_error
ensure
if RUBYGEMS_ACTIVATION_MONITOR.mon_owned?
if !monitor_owned && RUBYGEMS_ACTIVATION_MONITOR.mon_owned?
STDERR.puts [$$, Thread.current, $!, $!.backtrace].inspect if $!
raise "CRITICAL: RUBYGEMS_ACTIVATION_MONITOR is holding."
end