From: Michael Neumann Date: 2004-12-21T22:33:47+09:00 Subject: [bug] serious memory leak + continuations 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