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 по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Cant load pgtclsh library into application
Следующее
От: "Ross J. Reedstrom"
Дата:
Сообщение: Re: Can a windows DLL have more than one process attached?