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