
"Aaron W. LaFramboise" wrote:
... -I think it might be possible for threads to die some other way. I don't think anything makes any guarantee that ExitThread and TerminateThread are the only ways a thread may exit. For example, a thread may be caused to exit by some lower-level API (perhaps a direct access to NTDLL). ...
Yes. ExitProcess, for example, will terminate all misbehaving threads. By misbehaving I mean something from as dumb as thread procedure like: while(true) ; to complex thread procedures using locks, mutexes and so on. I share your opinions about hooking API calls. To summarize my own understanding (or misunderstanding) let me try classify the problem issues: 1) TSS slot cleanup. 1a) intentional leak of a 'hidden' native slot 1b) cleanup of TSS slots reserved by boost::thread_specific_ptr<class T> 2) cleanup of objects stored in TSS slots. semi-sloppy thread procedures that forget reset like: { if (ptr.get() == 0) ptr.reset(new Object()); .... code // forgotten ptr.reset(); } 3) Thread (and process/main thread) exit notifications required for cleanup 3a) semi-sloppy thread procedures will get TSS and objects cleaned up 3b) misbehaving thread procedures leaking everything, including TSS Tony