Remove unsafe calling of WSAStartup and WSACleanup from DllMain. Move the
inline cleanup call around so it will be called in the right order, and be called on errors. Per report from Tokuharu Yuzawa.
This commit is contained in:
parent
2825337232
commit
c0aa50630b
@ -93,7 +93,6 @@ CLEAN :
|
|||||||
-@erase "$(INTDIR)\fe-secure.obj"
|
-@erase "$(INTDIR)\fe-secure.obj"
|
||||||
-@erase "$(INTDIR)\pqexpbuffer.obj"
|
-@erase "$(INTDIR)\pqexpbuffer.obj"
|
||||||
-@erase "$(INTDIR)\pqsignal.obj"
|
-@erase "$(INTDIR)\pqsignal.obj"
|
||||||
-@erase "$(OUTDIR)\libpqdll.obj"
|
|
||||||
-@erase "$(OUTDIR)\win32.obj"
|
-@erase "$(OUTDIR)\win32.obj"
|
||||||
-@erase "$(INTDIR)\wchar.obj"
|
-@erase "$(INTDIR)\wchar.obj"
|
||||||
-@erase "$(INTDIR)\encnames.obj"
|
-@erase "$(INTDIR)\encnames.obj"
|
||||||
@ -155,14 +154,13 @@ RSC_PROJ=-l 0x409 -i$(BCB)\include -fo"$(INTDIR)\libpq.res"
|
|||||||
|
|
||||||
LINK32=ilink32.exe
|
LINK32=ilink32.exe
|
||||||
LINK32_FLAGS = -Gn -L$(BCB)\lib;$(INTDIR); -x -Tpd -v
|
LINK32_FLAGS = -Gn -L$(BCB)\lib;$(INTDIR); -x -Tpd -v
|
||||||
LINK32_OBJS= "$(INTDIR)\libpqdll.obj"
|
|
||||||
|
|
||||||
# @<< is a Response file, http://www.opussoftware.com/tutorial/TutMakefile.htm
|
# @<< is a Response file, http://www.opussoftware.com/tutorial/TutMakefile.htm
|
||||||
|
|
||||||
"$(OUTDIR)\blibpq.dll": "$(OUTDIR)\blibpq.lib" $(LINK32_OBJS) "$(INTDIR)\libpq.res" blibpqdll.def
|
"$(OUTDIR)\blibpq.dll": "$(OUTDIR)\blibpq.lib" "$(INTDIR)\libpq.res" blibpqdll.def
|
||||||
$(LINK32) @<<
|
$(LINK32) @<<
|
||||||
$(LINK32_FLAGS) +
|
$(LINK32_FLAGS) +
|
||||||
c0d32.obj $(LINK32_OBJS), +
|
c0d32.obj , +
|
||||||
$@,, +
|
$@,, +
|
||||||
"$(OUTDIR)\blibpq.lib" import32.lib cw32mt.lib, +
|
"$(OUTDIR)\blibpq.lib" import32.lib cw32mt.lib, +
|
||||||
blibpqdll.def,"$(INTDIR)\libpq.res"
|
blibpqdll.def,"$(INTDIR)\libpq.res"
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.344 2007/02/20 15:20:51 momjian Exp $
|
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.345 2007/03/08 19:27:28 mha Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -1840,9 +1840,7 @@ makeEmptyPGconn(void)
|
|||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make sure socket support is up and running. Even though this is done in
|
* Make sure socket support is up and running.
|
||||||
* libpqdll.c, that is only for MSVC and BCC builds and doesn't work for
|
|
||||||
* static builds at all, so we have to do it in the main code too.
|
|
||||||
*/
|
*/
|
||||||
WSADATA wsaData;
|
WSADATA wsaData;
|
||||||
|
|
||||||
@ -1853,7 +1851,12 @@ makeEmptyPGconn(void)
|
|||||||
|
|
||||||
conn = (PGconn *) malloc(sizeof(PGconn));
|
conn = (PGconn *) malloc(sizeof(PGconn));
|
||||||
if (conn == NULL)
|
if (conn == NULL)
|
||||||
|
{
|
||||||
|
#ifdef WIN32
|
||||||
|
WSACleanup();
|
||||||
|
#endif
|
||||||
return conn;
|
return conn;
|
||||||
|
}
|
||||||
|
|
||||||
/* Zero all pointers and booleans */
|
/* Zero all pointers and booleans */
|
||||||
MemSet(conn, 0, sizeof(PGconn));
|
MemSet(conn, 0, sizeof(PGconn));
|
||||||
@ -1918,10 +1921,6 @@ freePGconn(PGconn *conn)
|
|||||||
PGnotify *notify;
|
PGnotify *notify;
|
||||||
pgParameterStatus *pstatus;
|
pgParameterStatus *pstatus;
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
WSACleanup();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!conn)
|
if (!conn)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1986,6 +1985,10 @@ freePGconn(PGconn *conn)
|
|||||||
termPQExpBuffer(&conn->errorMessage);
|
termPQExpBuffer(&conn->errorMessage);
|
||||||
termPQExpBuffer(&conn->workBuffer);
|
termPQExpBuffer(&conn->workBuffer);
|
||||||
free(conn);
|
free(conn);
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
WSACleanup();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1,33 +0,0 @@
|
|||||||
/* $PostgreSQL: pgsql/src/interfaces/libpq/libpqdll.c,v 1.10 2006/03/11 04:38:40 momjian Exp $ */
|
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
|
||||||
#include <winsock.h>
|
|
||||||
#include <windows.h>
|
|
||||||
#include "win32.h"
|
|
||||||
|
|
||||||
|
|
||||||
BOOL WINAPI
|
|
||||||
DllMain(HINSTANCE hinstDLL, DWORD fdwReason,
|
|
||||||
LPVOID lpReserved)
|
|
||||||
{
|
|
||||||
WSADATA wsaData;
|
|
||||||
|
|
||||||
switch (fdwReason)
|
|
||||||
{
|
|
||||||
case DLL_PROCESS_ATTACH:
|
|
||||||
if (WSAStartup(MAKEWORD(1, 1), &wsaData))
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* No really good way to do error handling here, since we
|
|
||||||
* don't know how we were loaded
|
|
||||||
*/
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case DLL_PROCESS_DETACH:
|
|
||||||
WSACleanup();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
@ -63,7 +63,6 @@ CLEAN :
|
|||||||
-@erase "$(INTDIR)\fe-secure.obj"
|
-@erase "$(INTDIR)\fe-secure.obj"
|
||||||
-@erase "$(INTDIR)\pqexpbuffer.obj"
|
-@erase "$(INTDIR)\pqexpbuffer.obj"
|
||||||
-@erase "$(INTDIR)\pqsignal.obj"
|
-@erase "$(INTDIR)\pqsignal.obj"
|
||||||
-@erase "$(OUTDIR)\libpqdll.obj"
|
|
||||||
-@erase "$(OUTDIR)\win32.obj"
|
-@erase "$(OUTDIR)\win32.obj"
|
||||||
-@erase "$(INTDIR)\wchar.obj"
|
-@erase "$(INTDIR)\wchar.obj"
|
||||||
-@erase "$(INTDIR)\encnames.obj"
|
-@erase "$(INTDIR)\encnames.obj"
|
||||||
@ -143,7 +142,6 @@ LINK32_FLAGS=kernel32.lib user32.lib advapi32.lib shfolder.lib wsock32.lib $(SSL
|
|||||||
/pdb:"$(OUTDIR)\libpqdll.pdb" /machine:I386 /out:"$(OUTDIR)\$(OUTFILENAME).dll"\
|
/pdb:"$(OUTDIR)\libpqdll.pdb" /machine:I386 /out:"$(OUTDIR)\$(OUTFILENAME).dll"\
|
||||||
/implib:"$(OUTDIR)\$(OUTFILENAME)dll.lib" /def:$(OUTFILENAME)dll.def
|
/implib:"$(OUTDIR)\$(OUTFILENAME)dll.lib" /def:$(OUTFILENAME)dll.def
|
||||||
LINK32_OBJS= \
|
LINK32_OBJS= \
|
||||||
"$(INTDIR)\libpqdll.obj" \
|
|
||||||
"$(OUTDIR)\$(OUTFILENAME).lib" \
|
"$(OUTDIR)\$(OUTFILENAME).lib" \
|
||||||
"$(OUTDIR)\libpq.res"
|
"$(OUTDIR)\libpq.res"
|
||||||
|
|
||||||
@ -159,7 +157,7 @@ LINK32_OBJS= \
|
|||||||
$(RSC) $(RSC_PROJ) libpq.rc
|
$(RSC) $(RSC_PROJ) libpq.rc
|
||||||
|
|
||||||
|
|
||||||
"$(OUTDIR)\$(OUTFILENAME).dll" : "$(OUTDIR)" "$(OUTDIR)\libpqdll.obj" "$(INTDIR)\libpqdll.obj" "$(INTDIR)\libpq.res"
|
"$(OUTDIR)\$(OUTFILENAME).dll" : "$(OUTDIR)" "$(INTDIR)\libpq.res"
|
||||||
$(LINK32) @<<
|
$(LINK32) @<<
|
||||||
$(LINK32_FLAGS) $(LINK32_OBJS)
|
$(LINK32_FLAGS) $(LINK32_OBJS)
|
||||||
<<
|
<<
|
||||||
|
Loading…
x
Reference in New Issue
Block a user