From: Michael Bruschkewitz Date: 2003-03-14T23:21:26+09:00 Subject: method call on terminated object [W2k,1.6.8} Hello, I got the "method call on terminated object" error from the following lines, after passing these lines many times successful: class TC def onTcp conn loop { s = conn.read 1024 # read String up to 1024 bytes break if s.empty? @obudline << s print @obudline.length,': '; p @obudline while @obudline.include?("\n") # all fine until here # error here vvvvvvvvvvvvvvvvvvv s = @obudline.slice!(/.*\n/) # next line ... @passed = true if condition # simplified } end ... end My question is: Under which circumstances is an String "terminated"? Very simplified global scenario: load 'tc1.rb' $tc.onTcp (conn) unless tc.passed # runs fine many 1000 times load 'tc2.rb' $tc.onTcp (conn) unless tc.passed # fails after some reads tc1.rb: class TC1 < TC end $tc = TC1.new tc2.rb class TC2 < TC end $tc = TC2.new conn.read calls the following function from an own extension: VALUE TCP_Read(VALUE self, VALUE maxL) { CRbTcp* p; Data_Get_Struct(self, CRbTcp, p); int ml = NUM2INT(maxL); std::string data; try { data=p->Read(ml); } catch(CRbException & e) { ext_raise(self,e.str(),__FILE__,__LINE__); } return rb_str_new(data.data(),data.size()); } ../defTestcase.rb:880:in `slice!': method call on terminated object (NotImplementedError) from ./defTestcase.rb:880:in `onTcp'