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)
 <<