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
===============================================================================