Unix Technical Forum

BUG #1545: LIBPQ Windows Version not calling WSACleanup for every WSAStartup

This is a discussion on BUG #1545: LIBPQ Windows Version not calling WSACleanup for every WSAStartup within the pgsql Bugs forums, part of the PostgreSQL category; --> The following bug has been logged online: Bug reference: 1545 Logged by: Jason Erickson Email address: jerickso@indian.com PostgreSQL version: ...


Go Back   Unix Technical Forum > Database Server Software > PostgreSQL > pgsql Bugs

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 04-10-2008, 09:39 AM
Jason Erickson
 
Posts: n/a
Default BUG #1545: LIBPQ Windows Version not calling WSACleanup for every WSAStartup


The following bug has been logged online:

Bug reference: 1545
Logged by: Jason Erickson
Email address: jerickso@indian.com
PostgreSQL version: 8.0.1,7.4.7
Operating system: Windows
Description: LIBPQ Windows Version not calling WSACleanup for every
WSAStartup
Details:

Taken from microsoft at:
http://msdn.microsoft.com/library/de...us/winsock/win
sock/wsastartup_2.asp
-------------------------------------------------------
An application must call one WSACleanup call for every successful WSAStartup
call to allow third-party DLLs to make use of a WS2_32.DLL on behalf of an
application. This means, for example, that if an application calls
WSAStartup three times, it must call WSACleanup three times. The first two
calls to WSACleanup do nothing except decrement an internal counter; the
final WSACleanup call for the task does all necessary resource deallocation
for the task.
------------------------------------------------------------------

The only place WSACleanup is being called is libpqdll when the process
detaches the DLL (if the libpq is not staticly linked in), which matches up
with the WSAStartup when the process attaches to the DLL.

The WSAStartup in the fe-connect.c->makeEmptyPGconn() does not have a
matching WSACleanup. WSACleanup could possibly be placed in freePGconn(),
but unsure if all possible error cases will go through this function.

This problem exists in both 8.0.1 and 7.4.7 of the libpq interface for
Windows.

---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #2 (permalink)  
Old 04-10-2008, 09:49 AM
Bruce Momjian
 
Posts: n/a
Default Re: BUG #1545: LIBPQ Windows Version not calling WSACleanup for

Jason Erickson wrote:
> Taken from microsoft at:
> http://msdn.microsoft.com/library/de...us/winsock/win
> sock/wsastartup_2.asp
> -------------------------------------------------------
> An application must call one WSACleanup call for every successful WSAStartup
> call to allow third-party DLLs to make use of a WS2_32.DLL on behalf of an
> application. This means, for example, that if an application calls
> WSAStartup three times, it must call WSACleanup three times. The first two
> calls to WSACleanup do nothing except decrement an internal counter; the
> final WSACleanup call for the task does all necessary resource deallocation
> for the task.
> ------------------------------------------------------------------
>
> The only place WSACleanup is being called is libpqdll when the process
> detaches the DLL (if the libpq is not staticly linked in), which matches up
> with the WSAStartup when the process attaches to the DLL.
>
> The WSAStartup in the fe-connect.c->makeEmptyPGconn() does not have a
> matching WSACleanup. WSACleanup could possibly be placed in freePGconn(),
> but unsure if all possible error cases will go through this function.
>
> This problem exists in both 8.0.1 and 7.4.7 of the libpq interface for
> Windows.


I agree freePGconn() is the proper place. I will apply the following
patch to current CVS and to 8.0.X. 8.0.3 is being packaged now so I
will wait for 8.0.4.

--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073

Index: src/interfaces/libpq/fe-connect.c
================================================== =================
RCS file: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v
retrieving revision 1.304
diff -c -c -r1.304 fe-connect.c
*** src/interfaces/libpq/fe-connect.c 25 Mar 2005 00:34:29 -0000 1.304
--- src/interfaces/libpq/fe-connect.c 5 May 2005 15:43:06 -0000
***************
*** 2034,2039 ****
--- 2034,2043 ----
PGnotify *notify;
pgParameterStatus *pstatus;

+ #ifdef WIN32
+ WSACleanup();
+ #endif
+
if (!conn)
return;



---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #3 (permalink)  
Old 04-10-2008, 09:49 AM
Tom Lane
 
Posts: n/a
Default Re: BUG #1545: LIBPQ Windows Version not calling WSACleanup for

Bruce Momjian <pgman@candle.pha.pa.us> writes:
> I agree freePGconn() is the proper place. I will apply the following
> patch to current CVS and to 8.0.X. 8.0.3 is being packaged now so I
> will wait for 8.0.4.


Go ahead and put it in --- I'll wait for your commit.

regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #4 (permalink)  
Old 04-10-2008, 09:49 AM
Tom Lane
 
Posts: n/a
Default Re: BUG #1545: LIBPQ Windows Version not calling WSACleanup for

Bruce Momjian <pgman@candle.pha.pa.us> writes:
> Jason Erickson wrote:
>> The only place WSACleanup is being called is libpqdll when the process
>> detaches the DLL (if the libpq is not staticly linked in), which matches up
>> with the WSAStartup when the process attaches to the DLL.
>>
>> The WSAStartup in the fe-connect.c->makeEmptyPGconn() does not have a
>> matching WSACleanup. WSACleanup could possibly be placed in freePGconn(),
>> but unsure if all possible error cases will go through this function.
>>
>> This problem exists in both 8.0.1 and 7.4.7 of the libpq interface for
>> Windows.


> I agree freePGconn() is the proper place. I will apply the following
> patch to current CVS and to 8.0.X. 8.0.3 is being packaged now so I
> will wait for 8.0.4.


Actually ... why do we need a WSAStartup in makeEmptyPGconn? If we have
one in DLL attach, isn't that sufficient?

regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #5 (permalink)  
Old 04-10-2008, 09:49 AM
Bruce Momjian
 
Posts: n/a
Default Re: BUG #1545: LIBPQ Windows Version not calling WSACleanup for

Tom Lane wrote:
> Bruce Momjian <pgman@candle.pha.pa.us> writes:
> > Jason Erickson wrote:
> >> The only place WSACleanup is being called is libpqdll when the process
> >> detaches the DLL (if the libpq is not staticly linked in), which matches up
> >> with the WSAStartup when the process attaches to the DLL.
> >>
> >> The WSAStartup in the fe-connect.c->makeEmptyPGconn() does not have a
> >> matching WSACleanup. WSACleanup could possibly be placed in freePGconn(),
> >> but unsure if all possible error cases will go through this function.
> >>
> >> This problem exists in both 8.0.1 and 7.4.7 of the libpq interface for
> >> Windows.

>
> > I agree freePGconn() is the proper place. I will apply the following
> > patch to current CVS and to 8.0.X. 8.0.3 is being packaged now so I
> > will wait for 8.0.4.

>
> Actually ... why do we need a WSAStartup in makeEmptyPGconn? If we have
> one in DLL attach, isn't that sufficient?


The DLL attach function in libpqdll.c is only linked into the binary
when we are doing a WIN32_CLIENT_ONLY build from one of the *.mak files
with MSVC or BCC. It isn't linked in using the standard Makefile under
MinGW.

Seems the proper solution is to link in libpqdll.c for all Win32 builds,
and remove the WSAStartup() call from fe-connect.c, rather than call it
for every connection request. Of course that is only for CVS HEAD.

However, the addition of WSACleanup() is so minor and hard to test that
I would rather do it after 8.0.3 is packaged.

--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073

---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/docs/faq

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #6 (permalink)  
Old 04-10-2008, 09:49 AM
Bruce Momjian
 
Posts: n/a
Default Re: BUG #1545: LIBPQ Windows Version not calling WSACleanup for


This has now been packpatched to 8.0.3 and 7.4.X and will be released in
the next few days.

---------------------------------------------------------------------------

Jason Erickson wrote:
>
> The following bug has been logged online:
>
> Bug reference: 1545
> Logged by: Jason Erickson
> Email address: jerickso@indian.com
> PostgreSQL version: 8.0.1,7.4.7
> Operating system: Windows
> Description: LIBPQ Windows Version not calling WSACleanup for every
> WSAStartup
> Details:
>
> Taken from microsoft at:
> http://msdn.microsoft.com/library/de...us/winsock/win
> sock/wsastartup_2.asp
> -------------------------------------------------------
> An application must call one WSACleanup call for every successful WSAStartup
> call to allow third-party DLLs to make use of a WS2_32.DLL on behalf of an
> application. This means, for example, that if an application calls
> WSAStartup three times, it must call WSACleanup three times. The first two
> calls to WSACleanup do nothing except decrement an internal counter; the
> final WSACleanup call for the task does all necessary resource deallocation
> for the task.
> ------------------------------------------------------------------
>
> The only place WSACleanup is being called is libpqdll when the process
> detaches the DLL (if the libpq is not staticly linked in), which matches up
> with the WSAStartup when the process attaches to the DLL.
>
> The WSAStartup in the fe-connect.c->makeEmptyPGconn() does not have a
> matching WSACleanup. WSACleanup could possibly be placed in freePGconn(),
> but unsure if all possible error cases will go through this function.
>
> This problem exists in both 8.0.1 and 7.4.7 of the libpq interface for
> Windows.
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster
>


--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073

---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT. The time now is 01:32 AM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0
www.UnixAdminTalk.com