Tom Lane wrote:
> Bruce Momjian <pgman@candle.pha.pa.us> writes:
> > Jason Erickson wrote:
> >> The only place WSACleanup is being called is libpqdll when the process
> >> detaches the DLL (if the libpq is not staticly linked in), which matches up
> >> with the WSAStartup when the process attaches to the DLL.
> >>
> >> The WSAStartup in the fe-connect.c->makeEmptyPGconn() does not have a
> >> matching WSACleanup. WSACleanup could possibly be placed in freePGconn(),
> >> but unsure if all possible error cases will go through this function.
> >>
> >> This problem exists in both 8.0.1 and 7.4.7 of the libpq interface for
> >> Windows.
>
> > I agree freePGconn() is the proper place. I will apply the following
> > patch to current CVS and to 8.0.X. 8.0.3 is being packaged now so I
> > will wait for 8.0.4.
>
> Actually ... why do we need a WSAStartup in makeEmptyPGconn? If we have
> one in DLL attach, isn't that sufficient?
The DLL attach function in libpqdll.c is only linked into the binary
when we are doing a WIN32_CLIENT_ONLY build from one of the *.mak files
with MSVC or BCC. It isn't linked in using the standard Makefile under
MinGW.
Seems the proper solution is to link in libpqdll.c for all Win32 builds,
and remove the WSAStartup() call from fe-connect.c, rather than call it
for every connection request. Of course that is only for CVS HEAD.
However, the addition of WSACleanup() is so minor and hard to test that
I would rather do it after 8.0.3 is packaged.
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073