
Aaron W. LaFramboise wrote: [snip previous conversation]
The DllMain() or tls_callback() functions call on_thread_enter() for both the DLL_PROCESS_ATTACH and the DLL_THREAD_ATTACH messages, and they call on_thread_exit for both the DLL_PROCESS_DETACH and DLL_THREAD_DETACH messages.
This scheme seems a little cleaner and so far seems to be working OK. Any thoughts about this?
Yes I think reference counting seems like a good idea here.
The only concern I have--I don't know how important this is--is that when a thread is killed with TerminateThread, I think neither TLS callbacks nor DllMain()s will be called. This would cause the TLS count to never reach zero, and for TlsFree to never be called.
Good point. Two comments: 1) If you're calling TerminateThread, you're probably already leaking; maybe one more leak won't matter. And...
These threads might not even be associated with the Boost TSS at all. For example, another third party library in some DLL might be using TerminateThread, and the application programmer may not even know about this, so it may be suprising to him when the reference count never reaches zero for apparently no good reason.
2) I"m only reference counting threads on which Boost.Threads tss is actually used, so this shouldn't happen. Mike