From c0aa50630be8d73b0c05c7b283adfc11598bb863 Mon Sep 17 00:00:00 2001 From: Magnus Hagander <magnus@hagander.net> Date: Thu, 8 Mar 2007 19:27:28 +0000 Subject: [PATCH] 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. --- src/interfaces/libpq/bcc32.mak | 6 ++---- src/interfaces/libpq/fe-connect.c | 19 ++++++++++-------- src/interfaces/libpq/libpqdll.c | 33 ------------------------------- src/interfaces/libpq/win32.mak | 4 +--- 4 files changed, 14 insertions(+), 48 deletions(-) delete mode 100644 src/interfaces/libpq/libpqdll.c diff --git a/src/interfaces/libpq/bcc32.mak b/src/interfaces/libpq/bcc32.mak index 992bb5b68e7..73fb1faf131 100644 --- a/src/interfaces/libpq/bcc32.mak +++ b/src/interfaces/libpq/bcc32.mak @@ -93,7 +93,6 @@ CLEAN : -@erase "$(INTDIR)\fe-secure.obj" -@erase "$(INTDIR)\pqexpbuffer.obj" -@erase "$(INTDIR)\pqsignal.obj" - -@erase "$(OUTDIR)\libpqdll.obj" -@erase "$(OUTDIR)\win32.obj" -@erase "$(INTDIR)\wchar.obj" -@erase "$(INTDIR)\encnames.obj" @@ -155,14 +154,13 @@ RSC_PROJ=-l 0x409 -i$(BCB)\include -fo"$(INTDIR)\libpq.res" LINK32=ilink32.exe 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 -"$(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_FLAGS) + - c0d32.obj $(LINK32_OBJS), + + c0d32.obj , + $@,, + "$(OUTDIR)\blibpq.lib" import32.lib cw32mt.lib, + blibpqdll.def,"$(INTDIR)\libpq.res" diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index 6d8198ac0e7..13c407d1cc1 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -8,7 +8,7 @@ * * * 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 /* - * Make sure socket support is up and running. Even though this is done in - * 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. + * Make sure socket support is up and running. */ WSADATA wsaData; @@ -1853,7 +1851,12 @@ makeEmptyPGconn(void) conn = (PGconn *) malloc(sizeof(PGconn)); if (conn == NULL) + { +#ifdef WIN32 + WSACleanup(); +#endif return conn; + } /* Zero all pointers and booleans */ MemSet(conn, 0, sizeof(PGconn)); @@ -1918,10 +1921,6 @@ freePGconn(PGconn *conn) PGnotify *notify; pgParameterStatus *pstatus; -#ifdef WIN32 - WSACleanup(); -#endif - if (!conn) return; @@ -1986,6 +1985,10 @@ freePGconn(PGconn *conn) termPQExpBuffer(&conn->errorMessage); termPQExpBuffer(&conn->workBuffer); free(conn); + +#ifdef WIN32 + WSACleanup(); +#endif } /* diff --git a/src/interfaces/libpq/libpqdll.c b/src/interfaces/libpq/libpqdll.c deleted file mode 100644 index 231b6a0e9b6..00000000000 --- a/src/interfaces/libpq/libpqdll.c +++ /dev/null @@ -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; -} diff --git a/src/interfaces/libpq/win32.mak b/src/interfaces/libpq/win32.mak index ca5f4326aa9..f558aaca46e 100644 --- a/src/interfaces/libpq/win32.mak +++ b/src/interfaces/libpq/win32.mak @@ -63,7 +63,6 @@ CLEAN : -@erase "$(INTDIR)\fe-secure.obj" -@erase "$(INTDIR)\pqexpbuffer.obj" -@erase "$(INTDIR)\pqsignal.obj" - -@erase "$(OUTDIR)\libpqdll.obj" -@erase "$(OUTDIR)\win32.obj" -@erase "$(INTDIR)\wchar.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"\ /implib:"$(OUTDIR)\$(OUTFILENAME)dll.lib" /def:$(OUTFILENAME)dll.def LINK32_OBJS= \ - "$(INTDIR)\libpqdll.obj" \ "$(OUTDIR)\$(OUTFILENAME).lib" \ "$(OUTDIR)\libpq.res" @@ -159,7 +157,7 @@ LINK32_OBJS= \ $(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_FLAGS) $(LINK32_OBJS) << -- GitLab