mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* test/ruby/envutil.rb (assert_no_memory_leak): On Solaris 9 or later,
if possible, execute child ruby with environment variables LD_PRELOAD=libumem.so UMEM_OPTIONS="backend=mmap". With these variables, freed memory is immediately returned to the OS. [Bug #10020] [ruby-dev:48391] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46791 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
47adf5709a
commit
ca1c23e2a7
2 changed files with 36 additions and 0 deletions
|
@ -1,3 +1,11 @@
|
|||
Sat Jul 12 01:13:45 2014 Naohisa Goto <ngotogenome@gmail.com>
|
||||
|
||||
* test/ruby/envutil.rb (assert_no_memory_leak): On Solaris 9 or later,
|
||||
if possible, execute child ruby with environment variables
|
||||
LD_PRELOAD=libumem.so UMEM_OPTIONS="backend=mmap". With these
|
||||
variables, freed memory is immediately returned to the OS.
|
||||
[Bug #10020] [ruby-dev:48391]
|
||||
|
||||
Fri Jul 11 20:49:10 2014 Masaki Suketa <masaki.suketa@nifty.ne.jp>
|
||||
|
||||
* ext/win32ole/win32ole.c: add WIN32OLE_RECORD class to support
|
||||
|
|
|
@ -408,6 +408,29 @@ eom
|
|||
assert_warning(*args) {$VERBOSE = false; yield}
|
||||
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: 1.5, rss: false, **opt)
|
||||
require_relative 'memory_status'
|
||||
token = "\e[7;1m#{$$.to_s}:#{Time.now.strftime('%s.%L')}:#{rand(0x10000).to_s(16)}:\e[m"
|
||||
|
@ -420,6 +443,11 @@ eom
|
|||
*args,
|
||||
"-v", "-",
|
||||
]
|
||||
if defined? NO_MEMORY_LEAK_ENVS then
|
||||
envs ||= {}
|
||||
newenvs = envs.merge(NO_MEMORY_LEAK_ENVS) { |_, _, _| break }
|
||||
envs = newenvs if newenvs
|
||||
end
|
||||
args.unshift(envs) if envs
|
||||
cmd = [
|
||||
'END {STDERR.puts '"#{token_dump}"'"FINAL=#{Memory::Status.new}"}',
|
||||
|
|
Loading…
Add table
Reference in a new issue