Can a windows DLL have more than one process attached? - Mailing list pgsql-interfaces

From Tom Lane
Subject Can a windows DLL have more than one process attached?
Date
Msg-id 24767.1006885900@sss.pgh.pa.us
Whole thread Raw
Responses Re: Can a windows DLL have more than one process attached?  ("Ross J. Reedstrom" <reedstrm@rice.edu>)
List 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 by date:

Previous
From: Tom Lane
Date:
Subject: Re: Cant load pgtclsh library into application
Next
From: "Ross J. Reedstrom"
Date:
Subject: Re: Can a windows DLL have more than one process attached?