dmitryh     2004/07/25 19:09:26

  Modified:    c/src/xalanc/XalanTransformer XalanTransformer.cpp
                        XalanTransformer.hpp
  Log:
  Fix for Bugzilla #22350
  
  Revision  Changes    Path
  1.16      +36 -20    
xml-xalan/c/src/xalanc/XalanTransformer/XalanTransformer.cpp
  
  Index: XalanTransformer.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XalanTransformer.cpp,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- XalanTransformer.cpp      26 Feb 2004 23:07:13 -0000      1.15
  +++ XalanTransformer.cpp      26 Jul 2004 02:09:25 -0000      1.16
  @@ -174,15 +174,10 @@
        // Initialize Xalan. 
        XalanAutoPtr<XSLTInit>                  initGuard(new XSLTInit);
        XalanAutoPtr<XSLTInputSource>   inputSourceGuard(new XSLTInputSource);
  +     EnsureFunctionsInstallation             instalGuard; 
  +     instalGuard.install();
   
  -     XalanExtensionsInstaller::installGlobal();
  -     XalanEXSLTCommonFunctionsInstaller::installGlobal();
  -     XalanEXSLTDynamicFunctionsInstaller::installGlobal();
  -     XalanEXSLTMathFunctionsInstaller::installGlobal();
  -     XalanEXSLTSetFunctionsInstaller::installGlobal();
  -     XalanEXSLTStringFunctionsInstaller::installGlobal();
  -     XalanEXSLTDateTimeFunctionsInstaller::installGlobal();
  -
  +     instalGuard.release();
        s_xsltInit = initGuard.release();
        s_emptyInputSource = inputSourceGuard.release();
   }
  @@ -192,19 +187,10 @@
   void
   XalanTransformer::terminate()
   {
  -     XalanExtensionsInstaller::uninstallGlobal();
  -     XalanEXSLTCommonFunctionsInstaller::uninstallGlobal();
  -     XalanEXSLTDynamicFunctionsInstaller::uninstallGlobal();
  -     XalanEXSLTMathFunctionsInstaller::uninstallGlobal();
  -     XalanEXSLTSetFunctionsInstaller::uninstallGlobal();
  -     XalanEXSLTStringFunctionsInstaller::uninstallGlobal();
  -     XalanEXSLTDateTimeFunctionsInstaller::uninstallGlobal();
  -
  -#if defined(XALAN_USE_ICU)
  -     XPath::uninstallFunction(XPathFunctionTable::s_formatNumber);
  -#endif
  +     {
  +             EnsureFunctionsInstallation             uninstalGuard;
  +     }
   
  -     // Terminate Xalan and release memory.
   #if defined(XALAN_CANNOT_DELETE_CONST)
        delete (XSLTInputSource*) s_emptyInputSource;
        delete (XSLTInit*) s_xsltInit;
  @@ -1296,6 +1282,36 @@
        return theResult;
   }
   
  +void
  +XalanTransformer::EnsureFunctionsInstallation::install()
  +{
  +
  +     XalanExtensionsInstaller::installGlobal();
  +     XalanEXSLTCommonFunctionsInstaller::installGlobal();
  +     XalanEXSLTDynamicFunctionsInstaller::installGlobal();
  +     XalanEXSLTMathFunctionsInstaller::installGlobal();
  +     XalanEXSLTSetFunctionsInstaller::installGlobal();
  +     XalanEXSLTStringFunctionsInstaller::installGlobal();
  +     XalanEXSLTDateTimeFunctionsInstaller::installGlobal();
  +}
  +
  +XalanTransformer::EnsureFunctionsInstallation::~EnsureFunctionsInstallation()
  +{
  +     if ( !m_release )
  +     {
  +             XalanExtensionsInstaller::uninstallGlobal();
  +             XalanEXSLTCommonFunctionsInstaller::uninstallGlobal();
  +             XalanEXSLTDynamicFunctionsInstaller::uninstallGlobal();
  +             XalanEXSLTMathFunctionsInstaller::uninstallGlobal();
  +             XalanEXSLTSetFunctionsInstaller::uninstallGlobal();
  +             XalanEXSLTStringFunctionsInstaller::uninstallGlobal();
  +             XalanEXSLTDateTimeFunctionsInstaller::uninstallGlobal();
  +
  +#if defined(XALAN_USE_ICU)
  +             XPath::uninstallFunction(XPathFunctionTable::s_formatNumber);
  +#endif
  +     }
  +}
   
   
   XALAN_CPP_NAMESPACE_END
  
  
  
  1.9       +25 -0     
xml-xalan/c/src/xalanc/XalanTransformer/XalanTransformer.hpp
  
  Index: XalanTransformer.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XalanTransformer.hpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- XalanTransformer.hpp      26 Feb 2004 23:07:13 -0000      1.8
  +++ XalanTransformer.hpp      26 Jul 2004 02:09:25 -0000      1.9
  @@ -815,6 +815,31 @@
        typedef std::vector<TraceListener*>                                     
TraceListenerVectorType;
   #endif
   
  +     class EnsureFunctionsInstallation
  +     {
  +     public:
  +             
  +             EnsureFunctionsInstallation() : 
  +               m_release(false)
  +             {         
  +             }
  +
  +             ~EnsureFunctionsInstallation();
  +
  +             static void
  +             install();
  +
  +             void
  +             release()
  +             {
  +                     m_release = true;
  +             }
  +
  +     private:
  +
  +             bool m_release;
  +     };
  +
        class EnsureDestroyParsedSource
        {
        public:
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to