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