>>>>> "n" == nobu nokada <nobu.nokada / softhome.net> writes:

n> Do you mean, in rb_dlsym_call(), the case that "to_ptr"
n> conversion failed, and that copied strings for 's' arguments
n> don't get freed?

 I've applied the patch

uln% grep FREE_ARGS_FROM_I *.c
sym.c:#define FREE_ARGS_FROM_I do {                     \
sym.c:#define FREE_ARGS do {i = 0; FREE_ARGS_FROM_I; } while (0)
sym.c:        FREE_ARGS_FROM_I;
sym.c:      FREE_ARGS_FROM_I;
sym.c:    FREE_ARGS_FROM_I;
sym.c:#undef FREE_ARGS_FROM_I
uln%
 
uln% ruby -v
ruby 1.9.0 (2005-01-10) [x86_64-linux]
uln% 

uln% cat b.rb
require "dl/struct"

module LIBC
  extend DL::Importable

  begin
    dlload "libc.so.6"
  rescue
    dlload "libc.so.5"
  end

  extern "int atoi(char*)"
end

system("ps aux | head -1")
1000000.times do |i|
   system("ps aux | grep b.rb | grep -v grep") if i % 40000 == 0
   LIBC.atoi("10")
end
uln% 
uln% ruby b.rb
USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
ts       16531  0.0  0.0  9136 2408 pts/3    S    15:01   0:00 ruby b.rb
ts       16531 23.0  0.0 14172 7460 pts/3    S    15:01   0:00 ruby b.rb
ts       16531 45.0  0.1 18028 11316 pts/3   S    15:01   0:00 ruby b.rb
ts       16531 66.0  0.1 22096 15384 pts/3   S    15:01   0:00 ruby b.rb
ts       16531 87.0  0.2 25932 19220 pts/3   S    15:01   0:00 ruby b.rb
ts       16531 99.9  0.2 29964 23252 pts/3   S    15:01   0:01 ruby b.rb
ts       16531 64.5  0.3 33856 27144 pts/3   S    15:01   0:01 ruby b.rb
ts       16531 75.5  0.3 37732 31020 pts/3   S    15:01   0:01 ruby b.rb
ts       16531 86.5  0.4 41780 35068 pts/3   S    15:01   0:01 ruby b.rb
ts       16531 97.0  0.4 45616 38904 pts/3   S    15:01   0:01 ruby b.rb
ts       16531 71.6  0.5 49660 42948 pts/3   S    15:01   0:02 ruby b.rb
ts       16531 79.0  0.5 53540 46828 pts/3   S    15:01   0:02 ruby b.rb
ts       16531 86.0  0.6 57424 50712 pts/3   S    15:01   0:02 ruby b.rb
ts       16531 93.3  0.6 61468 54756 pts/3   S    15:01   0:02 ruby b.rb
ts       16531 75.5  0.7 65300 58588 pts/3   S    15:01   0:03 ruby b.rb
ts       16531 81.0  0.7 69356 62644 pts/3   S    15:01   0:03 ruby b.rb
ts       16531 86.5  0.8 73228 66516 pts/3   S    15:01   0:03 ruby b.rb
ts       16531 92.0  0.8 77120 70408 pts/3   S    15:01   0:03 ruby b.rb
ts       16531 97.5  0.9 81152 74440 pts/3   S    15:01   0:03 ruby b.rb
ts       16531 82.4  0.9 84988 78276 pts/3   S    15:01   0:04 ruby b.rb
ts       16531 86.8  1.0 89052 82340 pts/3   S    15:01   0:04 ruby b.rb
ts       16531 91.2  1.0 92912 86200 pts/3   S    15:01   0:04 ruby b.rb
ts       16531 95.4  1.1 96816 90104 pts/3   S    15:01   0:04 ruby b.rb
ts       16531 83.1  1.1 100836 94124 pts/3  S    15:01   0:04 ruby b.rb
ts       16531 86.8  1.2 104672 97960 pts/3  S    15:01   0:05 ruby b.rb
uln% 


Guy Decoux