You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by bo...@apache.org on 2008/03/11 16:54:52 UTC

svn commit: r635984 - in /xerces/c/trunk/src/xercesc/util/NetAccessors/WinSock: BinHTTPURLInputStream.cpp WinSockNetAccessor.cpp

Author: borisk
Date: Tue Mar 11 08:54:37 2008
New Revision: 635984

URL: http://svn.apache.org/viewvc?rev=635984&view=rev
Log:
Lock the mutex when parforming cleanup in the WinSock net accessor

Modified:
    xerces/c/trunk/src/xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.cpp
    xerces/c/trunk/src/xercesc/util/NetAccessors/WinSock/WinSockNetAccessor.cpp

Modified: xerces/c/trunk/src/xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.cpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.cpp?rev=635984&r1=635983&r2=635984&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.cpp (original)
+++ xerces/c/trunk/src/xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.cpp Tue Mar 11 08:54:37 2008
@@ -176,68 +176,74 @@
 
 bool BinHTTPURLInputStream::fInitialized = false;
 
-void BinHTTPURLInputStream::Initialize(MemoryManager* const manager) {
+void BinHTTPURLInputStream::Initialize(MemoryManager* const manager)
+{
     //
     // Initialize the WinSock library here.
     //
     WORD        wVersionRequested;
     WSADATA     wsaData;
 
-	LPFN_WSASTARTUP startup = NULL;
-	if(gWinsockLib == NULL) {
+    LPFN_WSASTARTUP startup = NULL;
+    if(gWinsockLib == NULL)
+    {
 #ifdef WITH_IPV6
-		gWinsockLib = LoadLibraryA("WS2_32");
+      gWinsockLib = LoadLibraryA("WS2_32");
 #else
-		gWinsockLib = LoadLibraryA("WSOCK32");
+      gWinsockLib = LoadLibraryA("WSOCK32");
 #endif
-		if(gWinsockLib == NULL) {
-			ThrowXMLwithMemMgr(NetAccessorException, XMLExcepts::NetAcc_InitFailed, manager);
-		}
-		else {
-			startup = (LPFN_WSASTARTUP) GetProcAddress(gWinsockLib,"WSAStartup");
-			gWSACleanup = (LPFN_WSACLEANUP) GetProcAddress(gWinsockLib,"WSACleanup");
-			gWShtons = (LPFN_HTONS) GetProcAddress(gWinsockLib,"htons");
-			gWSsocket = (LPFN_SOCKET) GetProcAddress(gWinsockLib,"socket");
-			gWSconnect = (LPFN_CONNECT) GetProcAddress(gWinsockLib,"connect");
-			gWSsend = (LPFN_SEND) GetProcAddress(gWinsockLib,"send");
-			gWSrecv = (LPFN_RECV) GetProcAddress(gWinsockLib,"recv");
-			gWSshutdown = (LPFN_SHUTDOWN) GetProcAddress(gWinsockLib,"shutdown");
-			gWSclosesocket = (LPFN_CLOSESOCKET) GetProcAddress(gWinsockLib,"closesocket");
+      if(gWinsockLib == NULL)
+      {
+          ThrowXMLwithMemMgr(NetAccessorException, XMLExcepts::NetAcc_InitFailed, manager);
+      }
+      else
+      {
+          startup = (LPFN_WSASTARTUP) GetProcAddress(gWinsockLib,"WSAStartup");
+          gWSACleanup = (LPFN_WSACLEANUP) GetProcAddress(gWinsockLib,"WSACleanup");
+          gWShtons = (LPFN_HTONS) GetProcAddress(gWinsockLib,"htons");
+          gWSsocket = (LPFN_SOCKET) GetProcAddress(gWinsockLib,"socket");
+          gWSconnect = (LPFN_CONNECT) GetProcAddress(gWinsockLib,"connect");
+          gWSsend = (LPFN_SEND) GetProcAddress(gWinsockLib,"send");
+          gWSrecv = (LPFN_RECV) GetProcAddress(gWinsockLib,"recv");
+          gWSshutdown = (LPFN_SHUTDOWN) GetProcAddress(gWinsockLib,"shutdown");
+          gWSclosesocket = (LPFN_CLOSESOCKET) GetProcAddress(gWinsockLib,"closesocket");
 #ifdef WITH_IPV6
-			gWSgetaddrinfo = (LPFN_GETADDRINFO) GetProcAddress(gWinsockLib,"getaddrinfo");
-            gWSfreeaddrinfo = (LPFN_FREEADDRINFO) GetProcAddress(gWinsockLib,"freeaddrinfo");
+          gWSgetaddrinfo = (LPFN_GETADDRINFO) GetProcAddress(gWinsockLib,"getaddrinfo");
+          gWSfreeaddrinfo = (LPFN_FREEADDRINFO) GetProcAddress(gWinsockLib,"freeaddrinfo");
 #else
-			gWSgethostbyname = (LPFN_GETHOSTBYNAME) GetProcAddress(gWinsockLib,"gethostbyname");
-			gWSgethostbyaddr = (LPFN_GETHOSTBYADDR) GetProcAddress(gWinsockLib,"gethostbyaddr");
-			gWSinet_addr = (LPFN_INET_ADDR) GetProcAddress(gWinsockLib,"inet_addr");
+          gWSgethostbyname = (LPFN_GETHOSTBYNAME) GetProcAddress(gWinsockLib,"gethostbyname");
+          gWSgethostbyaddr = (LPFN_GETHOSTBYADDR) GetProcAddress(gWinsockLib,"gethostbyaddr");
+          gWSinet_addr = (LPFN_INET_ADDR) GetProcAddress(gWinsockLib,"inet_addr");
 #endif
 
-			if(startup == NULL
-				|| gWSACleanup == NULL
-				|| gWShtons == NULL
-				|| gWSsocket == NULL
-				|| gWSconnect == NULL
-				|| gWSsend == NULL
-				|| gWSrecv == NULL
-				|| gWSshutdown == NULL
-				|| gWSclosesocket == NULL
+          if(startup == NULL
+             || gWSACleanup == NULL
+             || gWShtons == NULL
+             || gWSsocket == NULL
+             || gWSconnect == NULL
+             || gWSsend == NULL
+             || gWSrecv == NULL
+             || gWSshutdown == NULL
+             || gWSclosesocket == NULL
 #ifdef WITH_IPV6
-			    || gWSgetaddrinfo == NULL
-			    || gWSfreeaddrinfo == NULL
+             || gWSgetaddrinfo == NULL
+             || gWSfreeaddrinfo == NULL
 #else
-				|| gWSgethostbyname == NULL
-				|| gWSgethostbyaddr == NULL
-				|| gWSinet_addr == NULL
+             || gWSgethostbyname == NULL
+             || gWSgethostbyaddr == NULL
+             || gWSinet_addr == NULL
 #endif
-                )
-			{
-				gWSACleanup = NULL;
-				Cleanup();
-				ThrowXMLwithMemMgr(NetAccessorException, XMLExcepts::NetAcc_InitFailed, manager);
-			}
-		}
-	}
+          )
+          {
+              gWSACleanup = NULL;
+              Cleanup();
+              ThrowXMLwithMemMgr(NetAccessorException, XMLExcepts::NetAcc_InitFailed, manager);
+          }
+      }
+    }
+
     wVersionRequested = MAKEWORD( 2, 2 );
+
     int err = (*startup)(wVersionRequested, &wsaData);
     if (err != 0)
     {
@@ -247,31 +253,34 @@
     fInitialized = true;
 }
 
-void BinHTTPURLInputStream::Cleanup() {
-	if(fInitialized)
-	{
-		if(gWSACleanup) (*gWSACleanup)();
-		gWSACleanup = NULL;
-		FreeLibrary(gWinsockLib);
-		gWinsockLib = NULL;
-		gWShtons = NULL;
-		gWSsocket = NULL;
-		gWSconnect = NULL;
-		gWSsend = NULL;
-		gWSrecv = NULL;
-		gWSshutdown = NULL;
-		gWSclosesocket = NULL;
+void BinHTTPURLInputStream::Cleanup()
+{
+    XMLMutexLock lock(XMLPlatformUtils::fgAtomicMutex);
+
+    if(fInitialized)
+    {
+        if(gWSACleanup) (*gWSACleanup)();
+        gWSACleanup = NULL;
+        FreeLibrary(gWinsockLib);
+        gWinsockLib = NULL;
+        gWShtons = NULL;
+        gWSsocket = NULL;
+        gWSconnect = NULL;
+        gWSsend = NULL;
+        gWSrecv = NULL;
+        gWSshutdown = NULL;
+        gWSclosesocket = NULL;
 #ifdef WITH_IPV6
-		gWSgetaddrinfo = NULL;
+        gWSgetaddrinfo = NULL;
         gWSfreeaddrinfo = NULL;
 #else
-		gWSgethostbyname = NULL;
-		gWSgethostbyaddr = NULL;
-		gWSinet_addr = NULL;
+        gWSgethostbyname = NULL;
+        gWSgethostbyaddr = NULL;
+        gWSinet_addr = NULL;
 #endif
 
         fInitialized = false;
-	}
+    }
 }
 
 

Modified: xerces/c/trunk/src/xercesc/util/NetAccessors/WinSock/WinSockNetAccessor.cpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/util/NetAccessors/WinSock/WinSockNetAccessor.cpp?rev=635984&r1=635983&r2=635984&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/util/NetAccessors/WinSock/WinSockNetAccessor.cpp (original)
+++ xerces/c/trunk/src/xercesc/util/NetAccessors/WinSock/WinSockNetAccessor.cpp Tue Mar 11 08:54:37 2008
@@ -48,7 +48,7 @@
 WinSockNetAccessor::~WinSockNetAccessor()
 {
     // Cleanup code for the WinSock library here.
-	BinHTTPURLInputStream::Cleanup();
+    BinHTTPURLInputStream::Cleanup();
 }
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org