Can a windows DLL have more than one process attached?
От | Tom Lane |
---|---|
Тема | Can a windows DLL have more than one process attached? |
Дата | |
Msg-id | 24767.1006885900@sss.pgh.pa.us обсуждение исходный текст |
Ответы |
Re: Can a windows DLL have more than one process attached?
|
Список | pgsql-interfaces |
In reviewing some recent patches I notice the following code added to src/interfaces/libpq/libpqdll.c: BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) { switch (fdwReason) { case DLL_PROCESS_ATTACH: ... if (netmsgModule == NULL) netmsgModule = LoadLibraryEx("netmsg.dll", NULL, LOAD_LIBRARY_AS_DATAFILE); break; case DLL_PROCESS_DETACH: if (netmsgModule != NULL) FreeLibrary(netmsgModule); ... break; } } where netmsgModule is static HINSTANCE netmsgModule = NULL; This sure looks to me like it will fail miserably if more than one process can attach to the DLL concurrently: won't the first one to detach release the netmsg library, breaking access to it for all the remaining processes? I don't know enough about Windows to know if there's really a problem here, but the code looks fishy to me. I'd expect to need a reference count. Comments anyone? regards, tom lane
В списке pgsql-interfaces по дате отправления: