Hi,
ruby 1.9.0 (2004-12-20) [i386-freebsd5.2.1]
gcc version 3.3.3 [FreeBSD] 20031106
In my application, if I change:
# (1) this works
callback_stream.with_callbacks_for(self, :action) { |callback, val|
catch(:something) { callback.call }
throw :wee_back_to_session
}
into:
# (2) this leaks
callback_stream.with_callbacks_for(self, :action) { |callback, val|
res = catch(:something) { callback.call }
throw :wee_back_to_session
}
or into:
# (3) this leaks
callback_stream.with_callbacks_for(self, :action) { |callback, val|
callback.call
throw :wee_back_to_session
}
memory consumption is unbounded! BTW, “:something” is never thrown. It
seems that if I reference the return value of callback.call, the memory
leak appears. The leak also happens if I change “res = " in (2) into
”@res = " or "$res = ". Note that inside callback.call continuations are
created.
And if I return “nil” from the block (callback.call), it leaks, too,
even if I use code sample (1).
I tried above example also with ruby-stable compiled with 2.95.4 (-O0
enabled), but there all three examples leak memory.
It seems to be related to the “unknown node type 0 bug”, as it appears
to be pretty random (at least in my eyes):
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/123694
Help! I can send the whole sources to someone who is interested. Only
requirements are rubygems, installed narf gem (webunit) and gnuplot to
display memory consumption, and of course *nix.
Regards,
Michael