You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by tn...@apache.org on 2001/10/25 18:26:39 UTC

cvs commit: xml-xerces/c/src/util/NetAccessors/WinSock BinHTTPURLInputStream.cpp BinHTTPURLInputStream.hpp

tng         01/10/25 09:26:39

  Modified:    c/src/util/NetAccessors/WinSock BinHTTPURLInputStream.cpp
                        BinHTTPURLInputStream.hpp
  Log:
  [Bug 4213] BinHTTPURLInputStream initialisation not thread safe.  By Mark Weaver.
  
  Revision  Changes    Path
  1.11      +27 -6     xml-xerces/c/src/util/NetAccessors/WinSock/BinHTTPURLInputStream.cpp
  
  Index: BinHTTPURLInputStream.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/util/NetAccessors/WinSock/BinHTTPURLInputStream.cpp,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- BinHTTPURLInputStream.cpp	2001/10/25 16:10:46	1.10
  +++ BinHTTPURLInputStream.cpp	2001/10/25 16:26:39	1.11
  @@ -56,6 +56,9 @@
   
   /*
    * $Log: BinHTTPURLInputStream.cpp,v $
  + * Revision 1.11  2001/10/25 16:26:39  tng
  + * [Bug 4213] BinHTTPURLInputStream initialisation not thread safe.  By Mark Weaver.
  + *
    * Revision 1.10  2001/10/25 16:10:46  tng
    * [Bug 4121] BinHTTPUrlInputStream needds to read entire HTTP header. By John Clayton.
    *
  @@ -112,6 +115,8 @@
   #include <string.h>
   #include <stdlib.h>
   
  +
  +#include <util/PlatformUtils.hpp>
   #include <util/XMLNetAccessor.hpp>
   #include <util/NetAccessors/WinSock/BinHTTPURLInputStream.hpp>
   #include <util/XMLString.hpp>
  @@ -134,12 +139,12 @@
   LPFN_WSACLEANUP gWSACleanup = NULL;
   
   bool BinHTTPURLInputStream::fInitialized = false;
  +XMLMutex* BinHTTPURLInputStream::fInitMutex = 0;
   
   void BinHTTPURLInputStream::Initialize() {
       //
       // Initialize the WinSock library here.
       //
  -	fInitialized = true;
       WORD        wVersionRequested;
       WSADATA     wsaData;
   
  @@ -189,6 +194,7 @@
           // Call WSAGetLastError() to get the last error.
           ThrowXML(NetAccessorException, XMLExcepts::NetAcc_InitFailed);
       }
  +    fInitialized = true;
   }
   
   void BinHTTPURLInputStream::Cleanup() {
  @@ -208,7 +214,9 @@
   		gWSshutdown = NULL;
   		gWSclosesocket = NULL;
   		FreeLibrary(gWinsockLib);
  -		fInitialized = false;
  +      fInitialized = false;
  +      delete fInitMutex;
  +      fInitMutex = 0;
   	}
   }
   
  @@ -268,10 +276,23 @@
         : fSocketHandle(0)
         , fBytesProcessed(0)
   {
  -	if(!fInitialized)
  -	{
  -		Initialize();
  -	}
  +    if(!fInitialized)
  +    {
  +        if (!fInitMutex)
  +        {
  +            XMLMutex* tmpMutex = new XMLMutex;
  +            if (XMLPlatformUtils::compareAndSwap((void**)&fInitMutex, tmpMutex, 0))
  +            {
  +                // Someone beat us to it, so let's clean up ours
  +                delete tmpMutex;
  +            }
  +         }
  +         XMLMutexLock lock(fInitMutex);
  +         if (!fInitialized)
  +         {
  +             Initialize();
  +         }
  +    }
   
       //
       // Pull all of the parts of the URL out of th urlSource object, and transcode them
  
  
  
  1.5       +9 -2      xml-xerces/c/src/util/NetAccessors/WinSock/BinHTTPURLInputStream.hpp
  
  Index: BinHTTPURLInputStream.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/util/NetAccessors/WinSock/BinHTTPURLInputStream.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- BinHTTPURLInputStream.hpp	2001/01/22 16:43:39	1.4
  +++ BinHTTPURLInputStream.hpp	2001/10/25 16:26:39	1.5
  @@ -56,6 +56,9 @@
   
   /*
    * $Log: BinHTTPURLInputStream.hpp,v $
  + * Revision 1.5  2001/10/25 16:26:39  tng
  + * [Bug 4213] BinHTTPURLInputStream initialisation not thread safe.  By Mark Weaver.
  + *
    * Revision 1.4  2001/01/22 16:43:39  tng
    * Loads winsock dynamically.  Fixed by Curt Arnold.
    * Winsock2 is not initialized unless an http URL is used.    If an http
  @@ -89,7 +92,7 @@
   #include <util/XMLURL.hpp>
   #include <util/XMLExceptMsgs.hpp>
   #include <util/BinInputStream.hpp>
  -
  +#include <util/Mutexes.hpp>
   
   
   //
  @@ -140,7 +143,8 @@
       char                fBuffer[4000];
       char *              fBufferEnd;
       char *              fBufferPos;
  -	static bool         fInitialized;
  +    static bool         fInitialized;
  +    static XMLMutex*        fInitMutex;
   
   	static void Initialize();
   
  
  
  

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