You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by dm...@apache.org on 2004/07/26 04:09:26 UTC
cvs commit: xml-xalan/c/src/xalanc/XalanTransformer XalanTransformer.cpp XalanTransformer.hpp
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: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org