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 2003/01/09 16:30:09 UTC

cvs commit: xml-xerces/c/src/xercesc/validators/schema XSDErrorReporter.cpp XSDErrorReporter.hpp

tng         2003/01/09 07:30:09

  Modified:    c/src/xercesc/validators/schema XSDErrorReporter.cpp
                        XSDErrorReporter.hpp
  Log:
  Performance: construct message loader only when required.
  
  Revision  Changes    Path
  1.8       +47 -62    xml-xerces/c/src/xercesc/validators/schema/XSDErrorReporter.cpp
  
  Index: XSDErrorReporter.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/XSDErrorReporter.cpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- XSDErrorReporter.cpp	4 Dec 2002 02:32:43 -0000	1.7
  +++ XSDErrorReporter.cpp	9 Jan 2003 15:30:09 -0000	1.8
  @@ -56,6 +56,9 @@
   
   /**
     * $Log$
  +  * Revision 1.8  2003/01/09 15:30:09  tng
  +  * Performance: construct message loader only when required.
  +  *
     * Revision 1.7  2002/12/04 02:32:43  knoaman
     * #include cleanup.
     *
  @@ -87,7 +90,6 @@
   // ---------------------------------------------------------------------------
   //  Includes
   // ---------------------------------------------------------------------------
  -#include <xercesc/util/Mutexes.hpp>
   #include <xercesc/util/PlatformUtils.hpp>
   #include <xercesc/util/XMLString.hpp>
   #include <xercesc/framework/XMLErrorCodes.hpp>
  @@ -103,62 +105,70 @@
   // ---------------------------------------------------------------------------
   //  Local static data
   // ---------------------------------------------------------------------------
  -static bool               sMsgMutexRegistered = false;
  -static XMLMutex*          sErrMsgMutex = 0;
  -static XMLRegisterCleanup cleanupErrMsgMutex;
   static XMLMsgLoader*      gErrMsgLoader = 0;
   static XMLMsgLoader*      gValidMsgLoader = 0;
  -static XMLRegisterCleanup cleanupErrMsgLoader;
   
   
   // ---------------------------------------------------------------------------
   //  Local, static functions
   // ---------------------------------------------------------------------------
  -void XSDErrorReporter::reinitErrMsgLoader()
  +static void reinitErrMsgLoader()
   {
   	delete gErrMsgLoader;
   	gErrMsgLoader = 0;
  -	delete gValidMsgLoader;
  -	gValidMsgLoader = 0;
   }
   
  -
  -void XSDErrorReporter::reinitErrMsgMutex()
  +static void reinitValidMsgLoader()
   {
  -    delete sErrMsgMutex;
  -    sErrMsgMutex = 0;
  -    sMsgMutexRegistered = false;
  +	delete gValidMsgLoader;
  +	gValidMsgLoader = 0;
   }
   
  -//
  -//  We need to fault in this mutex. But, since its used for synchronization
  -//  itself, we have to do this the low level way using a compare and swap.
  -//
  -static XMLMutex& gErrMsgMutex()
  +static XMLMsgLoader* getErrMsgLoader()
   {
  -    if (!sErrMsgMutex)
  +    static XMLRegisterCleanup cleanupErrMsgLoader;
  +    if (gErrMsgLoader == 0)
       {
  -        XMLMutex* tmpMutex = new XMLMutex;
  -        if (XMLPlatformUtils::compareAndSwap((void**)&sErrMsgMutex, tmpMutex, 0))
  -        {
  -            // Someone beat us to it, so let's clean up ours
  -            delete tmpMutex;
  +        XMLMsgLoader* t = XMLPlatformUtils::loadMsgSet(XMLUni::fgXMLErrDomain);
  +        if (!t)
  +            XMLPlatformUtils::panic(XMLPlatformUtils::Panic_CantLoadMsgDomain);
  +        else {
  +            if (XMLPlatformUtils::compareAndSwap((void **)&gErrMsgLoader, t, 0) != 0)
  +            {
  +                delete t;
  +            }
  +            else
  +            {
  +                cleanupErrMsgLoader.registerCleanup(reinitErrMsgLoader);
  +            }
           }
  +    }
  +    return gErrMsgLoader;
  +}
   
  -        // Now lock it and try to register it
  -        XMLMutexLock lock(sErrMsgMutex);
   
  -        // If we got here first, then register it and set the registered flag
  -        if (!sMsgMutexRegistered)
  -        {
  -            cleanupErrMsgMutex.registerCleanup(XSDErrorReporter::reinitErrMsgMutex);
  -            sMsgMutexRegistered = true;
  +static XMLMsgLoader* getValidMsgLoader()
  +{
  +    static XMLRegisterCleanup cleanupValidMsgLoader;
  +    if (gValidMsgLoader == 0)
  +    {
  +        XMLMsgLoader* t = XMLPlatformUtils::loadMsgSet(XMLUni::fgXMLErrDomain);
  +        if (!t)
  +            XMLPlatformUtils::panic(XMLPlatformUtils::Panic_CantLoadMsgDomain);
  +        else {
  +            if (XMLPlatformUtils::compareAndSwap((void **)&gValidMsgLoader, t, 0) != 0)
  +            {
  +                delete t;
  +            }
  +            else
  +            {
  +                cleanupValidMsgLoader.registerCleanup(reinitValidMsgLoader);
  +            }
           }
       }
  -    return *sErrMsgMutex;
  +    return gValidMsgLoader;
   }
   
  -
   // ---------------------------------------------------------------------------
   //  XSDErrorReporter: Constructors and Destructor
   // ---------------------------------------------------------------------------
  @@ -167,31 +177,6 @@
       , fErrorReporter(errorReporter)
   {
   
  -    //
  -    //  We have to do a little init that involves statics, so we have to
  -    //  use the mutex to protect it.
  -    //
  -    {
  -        XMLMutexLock lockInit(&gErrMsgMutex());
  -
  -        // If we haven't loaded our message yet, then do that
  -        if (!gErrMsgLoader)
  -        {
  -            gErrMsgLoader = XMLPlatformUtils::loadMsgSet(XMLUni::fgXMLErrDomain);
  -            if (!gErrMsgLoader)
  -                XMLPlatformUtils::panic(XMLPlatformUtils::Panic_CantLoadMsgDomain);
  -
  -            gValidMsgLoader = XMLPlatformUtils::loadMsgSet(XMLUni::fgValidityDomain);
  -            if (!gValidMsgLoader) {
  -
  -                reinitErrMsgLoader();
  -                XMLPlatformUtils::panic(XMLPlatformUtils::Panic_CantLoadMsgDomain);
  -            }
  -
  -            // Register this object to be cleaned up at termination
  -			cleanupErrMsgLoader.registerCleanup(reinitErrMsgLoader);
  -        }
  -    }
   }
   
   
  @@ -212,13 +197,13 @@
       //
       const unsigned int msgSize = 1023;
       XMLCh errText[msgSize + 1];
  -    XMLMsgLoader* msgLoader = gErrMsgLoader;
  +    XMLMsgLoader* msgLoader = getErrMsgLoader();
       XMLErrorReporter::ErrTypes errType = XMLErrs::errorType((XMLErrs::Codes) toEmit);
   
       if (XMLString::equals(msgDomain, XMLUni::fgValidityDomain)) {
   
           errType = XMLValid::errorType((XMLValid::Codes) toEmit);
  -        msgLoader = gValidMsgLoader;
  +        msgLoader = getValidMsgLoader();
       }
   
       if (!msgLoader->loadMsg(toEmit, errText, msgSize))
  @@ -254,13 +239,13 @@
       //
       const unsigned int maxChars = 2047;
       XMLCh errText[maxChars + 1];
  -    XMLMsgLoader* msgLoader = gErrMsgLoader;
  +    XMLMsgLoader* msgLoader = getErrMsgLoader();
       XMLErrorReporter::ErrTypes errType = XMLErrs::errorType((XMLErrs::Codes) toEmit);
   
       if (XMLString::equals(msgDomain, XMLUni::fgValidityDomain)) {
   
           errType = XMLValid::errorType((XMLValid::Codes) toEmit);
  -        msgLoader = gValidMsgLoader;
  +        msgLoader = getValidMsgLoader();
       }
   
       if (!msgLoader->loadMsg(toEmit, errText, maxChars, text1, text2, text3, text4))
  
  
  
  1.4       +1 -7      xml-xerces/c/src/xercesc/validators/schema/XSDErrorReporter.hpp
  
  Index: XSDErrorReporter.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/XSDErrorReporter.hpp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- XSDErrorReporter.hpp	4 Nov 2002 14:49:42 -0000	1.3
  +++ XSDErrorReporter.hpp	9 Jan 2003 15:30:09 -0000	1.4
  @@ -97,12 +97,6 @@
       void setExitOnFirstFatal(const bool newValue);
   
       // -----------------------------------------------------------------------
  -    //  Notification that lazy data has been deleted
  -    // -----------------------------------------------------------------------
  -	static void reinitErrMsgMutex();
  -	static void reinitErrMsgLoader();
  -
  -    // -----------------------------------------------------------------------
       //  Report error methods
       // -----------------------------------------------------------------------
       void emitError(const unsigned int toEmit,
  
  
  

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