On Fri, Oct 23, 2009 at 9:37 AM, Nikolay Sivov bunglehead@gmail.com wrote:
Did I miss something?
Sorry, I'm not fully awake (and I think the last time I was fully awake was some time before I had children :-).
MSDN says "When a DLL is unloaded from a process as a result of an unsuccessful load of the DLL, termination of the process, or a call to FreeLibrary, the system does not call the DLL's entry-point function with the DLL_THREAD_DETACH value for the individual threads of the process. The DLL is only sent a DLL_PROCESS_DETACH notification. DLLs can take this opportunity to clean up all resources for all threads known to the DLL."
The DLL_PROCESS_DETACH handler might need to iterate over all things created by threads and free them. I think I've seen this before... check out urlmon/urlmon_main.c.