mirror of
https://github.com/ruby/ruby.git
synced 2025-08-24 21:44:30 +02:00
Capture the values of globals in EnvUtil to restore to the original
* Avoids the thread-safety issues mentioned in r61192, when thread concurrently modify default Encodings or $VERBOSE. Their state will always be the original one once the test finishes. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61195 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
cf4d4c32f3
commit
d5874f0fff
2 changed files with 24 additions and 20 deletions
|
@ -46,6 +46,14 @@ module EnvUtil
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
attr_accessor :subprocess_timeout_scale
|
attr_accessor :subprocess_timeout_scale
|
||||||
|
attr_reader :original_internal_encoding, :original_external_encoding,
|
||||||
|
:original_verbose
|
||||||
|
|
||||||
|
def capture_global_values
|
||||||
|
@original_internal_encoding = Encoding.default_internal
|
||||||
|
@original_external_encoding = Encoding.default_external
|
||||||
|
@original_verbose = $VERBOSE
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def apply_timeout_scale(t)
|
def apply_timeout_scale(t)
|
||||||
|
@ -167,27 +175,29 @@ module EnvUtil
|
||||||
class << (stderr = "".dup)
|
class << (stderr = "".dup)
|
||||||
alias write concat
|
alias write concat
|
||||||
end
|
end
|
||||||
stderr, $stderr, verbose, $VERBOSE = $stderr, stderr, $VERBOSE, true
|
stderr, $stderr = $stderr, stderr
|
||||||
|
$VERBOSE = true
|
||||||
yield stderr
|
yield stderr
|
||||||
return $stderr
|
return $stderr
|
||||||
ensure
|
ensure
|
||||||
stderr, $stderr, $VERBOSE = $stderr, stderr, verbose
|
stderr, $stderr = $stderr, stderr
|
||||||
|
$VERBOSE = EnvUtil.original_verbose
|
||||||
end
|
end
|
||||||
module_function :verbose_warning
|
module_function :verbose_warning
|
||||||
|
|
||||||
def default_warning
|
def default_warning
|
||||||
verbose, $VERBOSE = $VERBOSE, false
|
$VERBOSE = false
|
||||||
yield
|
yield
|
||||||
ensure
|
ensure
|
||||||
$VERBOSE = verbose
|
$VERBOSE = EnvUtil.original_verbose
|
||||||
end
|
end
|
||||||
module_function :default_warning
|
module_function :default_warning
|
||||||
|
|
||||||
def suppress_warning
|
def suppress_warning
|
||||||
verbose, $VERBOSE = $VERBOSE, nil
|
$VERBOSE = nil
|
||||||
yield
|
yield
|
||||||
ensure
|
ensure
|
||||||
$VERBOSE = verbose
|
$VERBOSE = EnvUtil.original_verbose
|
||||||
end
|
end
|
||||||
module_function :suppress_warning
|
module_function :suppress_warning
|
||||||
|
|
||||||
|
@ -200,26 +210,18 @@ module EnvUtil
|
||||||
module_function :under_gc_stress
|
module_function :under_gc_stress
|
||||||
|
|
||||||
def with_default_external(enc)
|
def with_default_external(enc)
|
||||||
verbose, $VERBOSE = $VERBOSE, nil
|
suppress_warning { Encoding.default_external = enc }
|
||||||
origenc, Encoding.default_external = Encoding.default_external, enc
|
|
||||||
$VERBOSE = verbose
|
|
||||||
yield
|
yield
|
||||||
ensure
|
ensure
|
||||||
verbose, $VERBOSE = $VERBOSE, nil
|
suppress_warning { Encoding.default_external = EnvUtil.original_external_encoding }
|
||||||
Encoding.default_external = origenc
|
|
||||||
$VERBOSE = verbose
|
|
||||||
end
|
end
|
||||||
module_function :with_default_external
|
module_function :with_default_external
|
||||||
|
|
||||||
def with_default_internal(enc)
|
def with_default_internal(enc)
|
||||||
verbose, $VERBOSE = $VERBOSE, nil
|
suppress_warning { Encoding.default_internal = enc }
|
||||||
origenc, Encoding.default_internal = Encoding.default_internal, enc
|
|
||||||
$VERBOSE = verbose
|
|
||||||
yield
|
yield
|
||||||
ensure
|
ensure
|
||||||
verbose, $VERBOSE = $VERBOSE, nil
|
suppress_warning { Encoding.default_internal = EnvUtil.original_internal_encoding }
|
||||||
Encoding.default_internal = origenc
|
|
||||||
$VERBOSE = verbose
|
|
||||||
end
|
end
|
||||||
module_function :with_default_internal
|
module_function :with_default_internal
|
||||||
|
|
||||||
|
@ -291,3 +293,5 @@ if defined?(RbConfig)
|
||||||
Gem::ConfigMap[:bindir] = dir if defined?(Gem::ConfigMap)
|
Gem::ConfigMap[:bindir] = dir if defined?(Gem::ConfigMap)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
EnvUtil.capture_global_values
|
||||||
|
|
|
@ -678,8 +678,8 @@ eom
|
||||||
end
|
end
|
||||||
|
|
||||||
def assert_warning(pat, msg = nil)
|
def assert_warning(pat, msg = nil)
|
||||||
stderr = EnvUtil.verbose_warning {
|
stderr = EnvUtil.with_default_internal(pat.encoding) {
|
||||||
EnvUtil.with_default_internal(pat.encoding) {
|
EnvUtil.verbose_warning {
|
||||||
yield
|
yield
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue