From: Ara.T.Howard@... Date: 2004-10-30T04:33:57+09:00 Subject: Re: Thread::list and GC On Sat, 30 Oct 2004, Eric Hodel wrote: > On Oct 28, 2004, at 9:53 PM, Ara.T.Howard wrote: > >> i have a program i'd like to exit gracefully on certain signals. the >> code spawns many threads which are never joined. however, when >> signaled i want to finished and pending threads before exiting - >> something like >> >> if $signaled >> Thread::list.each do |t| >> next if Thread::current == t >> begin >> t.join >> rescue => e >> warn{ e } >> end >> end >> end >> >> i'm wondering: >> >> if i spawn threads and never join them - will Thread::list grow >> without bound? >> >> are there any issues with iterating Thread::list - since this list is >> obviously changing all the time in this code (new Threads started) > > Have you seen the ThreadGroup class? A thread can only live in one > ThreadGroup, so you can create a ThreadGroup for spawned threads, add > the spawned threads to that ThreadGroup, then walk the ThreadGroup's > list on shutdown. This way you don't have to worry about killing > Thread.current i did look at that - however i'm worried that having a reference to the thread will maintain a reference that will keep it from getting GC'd. see, i normally simply spawn the threads and forget about them - it's only for catching signals that i need to shut down any running threads. does the above sound accurate? -a -- =============================================================================== | EMAIL :: Ara [dot] T [dot] Howard [at] noaa [dot] gov | PHONE :: 303.497.6469 | When you do something, you should burn yourself completely, like a good | bonfire, leaving no trace of yourself. --Shunryu Suzuki ===============================================================================