From: Geff Geff Date: 2006-09-16T12:15:33+09:00 Subject: Nested threading? implications to timeout() All, I'm certainly not a ruby expert by any means. I'm trying to come up to speed as fast as possible on ruby and rails. My last few months have been reading, coding, reading, more reading, more coding, etc. :) So I was doing some coding to try to come up to speed on ruby. I really think it's one of the most phenominal languages I've ever found. I never got into java, too verbose. That said I'd like to move on to the question. At this point, I'm trying to track down some sort of memory leak. In my vast amount of digging through google and writing test code, I came across the following interesting behavior. It seems that threads do not have a parent child relationships. So when one kills a thread, ruby doesn't actually kill any threads that were started inside that thread. To clarify, consider the following: irb(main):001:0> x=nil ; y = Thread.start { x = Thread.start { sleep 0.5 until false } ; sleep 0.5 until false } => # irb(main):002:0> x.status => "sleep" irb(main):003:0> y.kill => # irb(main):007:0> x.status => "sleep" irb(main):008:0> Clearly by killing, what I would call the "parent thread", did not kill the child thread. And this would be okay, I think, except that the way the timeout class works is by starting a thread and killing it if it doesn't complete in the right amount of time. So if I were to wrap anything in "timeout() {}" it's possible that something else calls timeout inside that and then the thread is still alive, until some later time. Is this normal? Can this cause memory leak? Am I confused? :) Thanks much for your help and feedback, Geff -- Posted via http://www.ruby-forum.com/.