On Thu, Mar 08, 2007 at 12:47:42PM +0100, Andreas Pflug wrote:
> Magnus Hagander wrote:
> > The easy fix for this is to remove the calls. Which obviously will break
> > some client apps. A fairly easy fix for the WSAStartup() call is to have
> > a check in the connection functions against a global variable that will
> > then make sure to call WSAStartup() the first time it's called.
> > That would leave us "leaking" the WSAStartup() call, but only one per
> > application. This is not perfect, but I'm thinking we can maybe live
> > with that.
> > If not, perhaps we can have it call WSAStartup() everytime we connect to
> > a server, and then WSACleanup() when we shut down that connection with
> > PQfinish().
> Taken from MSDN docs, this seems the recommended solution. After the
> first WSAStartup call subsequent calls are cheap because they only
> increment a counter.
Now that I look closer at it, we *already* do WSAStartup() in
makeEmptyPGconn... And free it in freePGconn().
So I suggest the following simple patch.. Any objections?
RCS file: /projects/cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v
retrieving revision 1.344
diff -c -r1.344 fe-connect.c
*** fe-connect.c 20 Feb 2007 15:20:51 -0000 1.344
--- fe-connect.c 8 Mar 2007 12:16:42 -0000
*** 1840,1848 ****
! * Make sure socket support is up and running. Even though this is done
! * 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.
--- 1840,1846 ----
! * Make sure socket support is up and running.
RCS file: /projects/cvsroot/pgsql/src/interfaces/libpq/libpqdll.c,v
retrieving revision 1.10
diff -c -r1.10 libpqdll.c
*** libpqdll.c 11 Mar 2006 04:38:40 -0000 1.10
--- libpqdll.c 8 Mar 2007 12:05:59 -0000
*** 15,31 ****
! 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;
--- 15,24 ----
! /* We used to call WSAStartup() here, but this may
cause deadlocks */
! /* We used to call WSACleanup() here, but this may
cause deadlocks */
---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster