mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* test/lib/envutil.rb (Test::Unit::Assertions#assert_no_memory_leak):
NO_MEMORY_LEAK_ENVS is moved to Memory::NO_MEMORY_LEAK_ENVS to reduce child executions during test-all on Solaris. * test/lib/memory_status.rb (Memory::NO_MEMORY_LEAK_ENVS): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51028 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
7bba6adc56
commit
8ffefcb621
3 changed files with 38 additions and 25 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
Thu Jun 25 18:25:41 2015 Naohisa Goto <ngotogenome@gmail.com>
|
||||||
|
|
||||||
|
* test/lib/envutil.rb (Test::Unit::Assertions#assert_no_memory_leak):
|
||||||
|
NO_MEMORY_LEAK_ENVS is moved to Memory::NO_MEMORY_LEAK_ENVS
|
||||||
|
to reduce child executions during test-all on Solaris.
|
||||||
|
|
||||||
|
* test/lib/memory_status.rb (Memory::NO_MEMORY_LEAK_ENVS): ditto.
|
||||||
|
|
||||||
Thu Jun 25 17:32:33 2015 Koichi Sasada <ko1@atdot.net>
|
Thu Jun 25 17:32:33 2015 Koichi Sasada <ko1@atdot.net>
|
||||||
|
|
||||||
* vm_method.c (rb_method_entry_create): need to call
|
* vm_method.c (rb_method_entry_create): need to call
|
||||||
|
|
|
@ -442,29 +442,6 @@ eom
|
||||||
assert_warning(*args) {$VERBOSE = false; yield}
|
assert_warning(*args) {$VERBOSE = false; yield}
|
||||||
end
|
end
|
||||||
|
|
||||||
case RUBY_PLATFORM
|
|
||||||
when /solaris2\.(?:9|[1-9][0-9])/i # Solaris 9, 10, 11,...
|
|
||||||
bits = [nil].pack('p').size == 8 ? 64 : 32
|
|
||||||
if ENV['LD_PRELOAD'].to_s.empty? &&
|
|
||||||
ENV["LD_PRELOAD_#{bits}"].to_s.empty? &&
|
|
||||||
(ENV['UMEM_OPTIONS'].to_s.empty? ||
|
|
||||||
ENV['UMEM_OPTIONS'] == 'backend=mmap') then
|
|
||||||
envs = {
|
|
||||||
'LD_PRELOAD' => 'libumem.so',
|
|
||||||
'UMEM_OPTIONS' => 'backend=mmap'
|
|
||||||
}
|
|
||||||
args = [
|
|
||||||
envs,
|
|
||||||
"--disable=gems",
|
|
||||||
"-v", "-",
|
|
||||||
]
|
|
||||||
_, err, status = EnvUtil.invoke_ruby(args, "exit(0)", true, true)
|
|
||||||
if status.exitstatus == 0 && err.to_s.empty? then
|
|
||||||
NO_MEMORY_LEAK_ENVS = envs
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end #case RUBY_PLATFORM
|
|
||||||
|
|
||||||
def assert_no_memory_leak(args, prepare, code, message=nil, limit: 2.0, rss: false, **opt)
|
def assert_no_memory_leak(args, prepare, code, message=nil, limit: 2.0, rss: false, **opt)
|
||||||
require_relative 'memory_status'
|
require_relative 'memory_status'
|
||||||
token = "\e[7;1m#{$$.to_s}:#{Time.now.strftime('%s.%L')}:#{rand(0x10000).to_s(16)}:\e[m"
|
token = "\e[7;1m#{$$.to_s}:#{Time.now.strftime('%s.%L')}:#{rand(0x10000).to_s(16)}:\e[m"
|
||||||
|
@ -477,9 +454,9 @@ eom
|
||||||
*args,
|
*args,
|
||||||
"-v", "-",
|
"-v", "-",
|
||||||
]
|
]
|
||||||
if defined? NO_MEMORY_LEAK_ENVS then
|
if defined? Memory::NO_MEMORY_LEAK_ENVS then
|
||||||
envs ||= {}
|
envs ||= {}
|
||||||
newenvs = envs.merge(NO_MEMORY_LEAK_ENVS) { |_, _, _| break }
|
newenvs = envs.merge(Memory::NO_MEMORY_LEAK_ENVS) { |_, _, _| break }
|
||||||
envs = newenvs if newenvs
|
envs = newenvs if newenvs
|
||||||
end
|
end
|
||||||
args.unshift(envs) if envs
|
args.unshift(envs) if envs
|
||||||
|
|
|
@ -108,4 +108,32 @@ module Memory
|
||||||
status
|
status
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# On some platforms (e.g. Solaris), libc malloc does not return
|
||||||
|
# freed memory to OS because of efficiency, and linking with extra
|
||||||
|
# malloc library is needed to detect memory leaks.
|
||||||
|
#
|
||||||
|
case RUBY_PLATFORM
|
||||||
|
when /solaris2\.(?:9|[1-9][0-9])/i # Solaris 9, 10, 11,...
|
||||||
|
bits = [nil].pack('p').size == 8 ? 64 : 32
|
||||||
|
if ENV['LD_PRELOAD'].to_s.empty? &&
|
||||||
|
ENV["LD_PRELOAD_#{bits}"].to_s.empty? &&
|
||||||
|
(ENV['UMEM_OPTIONS'].to_s.empty? ||
|
||||||
|
ENV['UMEM_OPTIONS'] == 'backend=mmap') then
|
||||||
|
envs = {
|
||||||
|
'LD_PRELOAD' => 'libumem.so',
|
||||||
|
'UMEM_OPTIONS' => 'backend=mmap'
|
||||||
|
}
|
||||||
|
args = [
|
||||||
|
envs,
|
||||||
|
"--disable=gems",
|
||||||
|
"-v", "-",
|
||||||
|
]
|
||||||
|
_, err, status = EnvUtil.invoke_ruby(args, "exit(0)", true, true)
|
||||||
|
if status.exitstatus == 0 && err.to_s.empty? then
|
||||||
|
NO_MEMORY_LEAK_ENVS = envs
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end #case RUBY_PLATFORM
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue