![]() | |
![]() |
| | Thread Tools | Display Modes |
#1
| |||
| |||
|
|
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. |
#2
| |||
| |||
|
|
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. |
#3
| |||
| |||
|
|
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. |
#4
| |||
| |||
|
|
The only place WSACleanup is being called is libpqdll when=20 the process detaches the DLL (if the libpq is not staticly linked in),=20 which matches up with the WSAStartup when the process attaches to the DLL. =20 The WSAStartup in the fe-connect.c->makeEmptyPGconn() does=20 not have a matching WSACleanup. WSACleanup could possibly be placed=20 in freePGconn(), but unsure if all possible error cases will go through this=20 function. =20 This problem exists in both 8.0.1 and 7.4.7 of the libpq=20 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?=20=20 If we have one in DLL attach, isn't that sufficient? |
#5
| |||
| |||
|
|
Actually ... why do we need a WSAStartup in makeEmptyPGconn? If we have one in DLL attach, isn't that sufficient? Not if you link libpq as a static lib... I *think* that's why it was added. In the beginning it was only in the DLL attach code, and if you were using the library as a static lib you had to call it yourself. Not sure when that changed, but clearly that is when the WSACleanup() call should've gone in. |
#6
| |||
| |||
|
|
Bruce Momjian <pgman (AT) candle (DOT) 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? |
#7
| |||
| |||
|
|
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? Not if you link libpq as a static lib... I *think* that's why it was added. In the beginning it was only in the DLL attach code, and if you were using the library as a static lib you had to call it yourself. Not sure when that changed, but clearly that is when the WSACleanup() call should've gone in. |
#8
| |||
| |||
|
|
"Magnus Hagander" <mha (AT) sollentuna (DOT) net> writes: Actually ... why do we need a WSAStartup in makeEmptyPGconn? If we have one in DLL attach, isn't that sufficient? Not if you link libpq as a static lib... I *think* that's why it was added. In the beginning it was only in the DLL attach code, and if you were using the library as a static lib you had to call it yourself. Not sure when that changed, but clearly that is when the WSACleanup() call should've gone in. Ah. Makes sense. So adding it to freePGconn is correct. Bruce, you should probably back-patch for as far as the WSAStartup call is there, which looks to be 7.4. |
#9
| |||
| |||
|
|
The following bug has been logged online: Bug reference: 1545 Logged by: Jason Erickson Email address: jerickso (AT) indian (DOT) 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 |
![]() |
| Thread Tools | |
| Display Modes | |
| |