Remove unsafe calling of WSAStartup and WSACleanup from DllMain. Move the
authorMagnus Hagander <magnus@hagander.net>
Thu, 8 Mar 2007 19:27:28 +0000 (19:27 +0000)
committerMagnus Hagander <magnus@hagander.net>
Thu, 8 Mar 2007 19:27:28 +0000 (19:27 +0000)
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
src/interfaces/libpq/fe-connect.c
src/interfaces/libpq/libpqdll.c [deleted file]
src/interfaces/libpq/win32.mak

index 992bb5b68e76016ae2635435c99147f02ce72916..73fb1faf131fee759f401d418e6274dbe77d3b9f 100644 (file)
@@ -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"
index 6d8198ac0e72e55d04a1c2e87d443ff131706388..13c407d1cc18e86982c8536611870ee9851b7463 100644 (file)
@@ -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 (file)
index 231b6a0..0000000
+++ /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;
-}
index ca5f4326aa9988593de0ccd43a5f243c4c144eb0..f558aaca46eb77150bfaeac9ea34dcee4473f43b 100644 (file)
@@ -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)
 <<