dbertoni    2004/10/12 14:57:08

  Modified:    c/src/xalanc/XSLT StylesheetExecutionContextDefault.cpp
                        StylesheetExecutionContextDefault.hpp
  Log:
  Fixed leak of DOMStringPrintWriter instances.
  
  Revision  Changes    Path
  1.31      +33 -24    
xml-xalan/c/src/xalanc/XSLT/StylesheetExecutionContextDefault.cpp
  
  Index: StylesheetExecutionContextDefault.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XSLT/StylesheetExecutionContextDefault.cpp,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- StylesheetExecutionContextDefault.cpp     13 Aug 2004 15:49:47 -0000      
1.30
  +++ StylesheetExecutionContextDefault.cpp     12 Oct 2004 21:57:08 -0000      
1.31
  @@ -94,8 +94,6 @@
   
   
   
  -
  -
   StylesheetExecutionContextDefault::StylesheetExecutionContextDefault(
                        XSLTEngineImpl&                 xsltProcessor,
                        XPathEnvSupport&                theXPathEnvSupport,
  @@ -3000,26 +2998,12 @@
   void
   StylesheetExecutionContextDefault::beginFormatToText(XalanDOMString&  
theResult)
   {
  -     FormatterToText* theFormatter = m_formatterToTextStack.get();
  +    FormatterToTextDOMString* const     theFormatter =
  +        m_formatterToTextStack.get();
  +    assert(theFormatter != 0);
  +
  +    theFormatter->setDOMString(theResult);
   
  -     if (theFormatter->getWriter() == 0)
  -     {
  -             theFormatter->setWriter(new DOMStringPrintWriter(theResult));
  -             theFormatter->setNormalizeLinefeed(false);
  -             theFormatter->setHandleIgnorableWhitespace(true);
  -             theFormatter->clearEncoding();
  -     }
  -     else
  -     {
  -              DOMStringPrintWriter*  thePrinterWriter  =
  -#if defined(XALAN_OLD_STYLE_CASTS)
  -                             
(DOMStringPrintWriter*)(theFormatter->getWriter());
  -#else
  -                             
static_cast<DOMStringPrintWriter*>(theFormatter->getWriter());
  -#endif
  -             thePrinterWriter->setString(theResult);
  -     }
  -     
        pushOutputContext(theFormatter);
        
        theFormatter->startDocument();
  @@ -3030,8 +3014,13 @@
   void
   StylesheetExecutionContextDefault::endFormatToText()
   {
  -     FormatterToText* theFormatter = m_formatterToTextStack.top();
  -     
  +     FormatterToText* const  theFormatter = m_formatterToTextStack.top();
  +     assert(
  +        theFormatter != 0 &&
  +        theFormatter->getEncoding().empty() == true &&
  +        theFormatter->getNormalizeLinefeed() == false &&
  +        theFormatter->getHandleIgnorableWhitespace() == true);
  +
        theFormatter->endDocument();
   
        popOutputContext();
  @@ -3108,8 +3097,28 @@
   
        m_nodesToTransformStack.pop_back();
   }
  -#endif
   
  +
  +
  +XalanDOMString  
StylesheetExecutionContextDefault::FormatterToTextDOMString::s_dummyString;
  +
  +
  +
  
+StylesheetExecutionContextDefault::FormatterToTextDOMString::FormatterToTextDOMString()
 :
  +    FormatterToText(),
  +    m_printWriter(s_dummyString)
  +{
  +    setNormalizeLinefeed(false);
  +
  +    setWriter(&m_printWriter);
  +}
  +
  +
  
+StylesheetExecutionContextDefault::FormatterToTextDOMString::~FormatterToTextDOMString()
  +{
  +    assert(s_dummyString.capacity() == 0);
  +}
  +#endif
   
   
   XALAN_CPP_NAMESPACE_END
  
  
  
  1.31      +29 -1     
xml-xalan/c/src/xalanc/XSLT/StylesheetExecutionContextDefault.hpp
  
  Index: StylesheetExecutionContextDefault.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XSLT/StylesheetExecutionContextDefault.hpp,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- StylesheetExecutionContextDefault.hpp     30 Sep 2004 22:28:10 -0000      
1.30
  +++ StylesheetExecutionContextDefault.hpp     12 Oct 2004 21:57:08 -0000      
1.31
  @@ -37,6 +37,12 @@
   
   
   
  +#if !defined(XALAN_RECURSIVE_STYLESHEET_EXECUTION)
  +#include <xalanc/PlatformSupport/DOMStringPrintWriter.hpp>
  +#endif
  +
  +
  +
   #include <xalanc/XPath/XPathExecutionContextDefault.hpp>
   
   
  @@ -1181,12 +1187,34 @@
   #endif
   
   #if !defined(XALAN_RECURSIVE_STYLESHEET_EXECUTION)
  +    class FormatterToTextDOMString : public FormatterToText
  +    {
  +    public:
  +
  +        FormatterToTextDOMString();
  +
  +        virtual
  +        ~FormatterToTextDOMString();
  +
  +        void
  +        setDOMString(XalanDOMString&    theString)
  +        {
  +            m_printWriter.setString(theString);
  +        }
  +
  +    private:
  +
  +        DOMStringPrintWriter    m_printWriter;
  +
  +        static XalanDOMString   s_dummyString;
  +    };
  +
        typedef XalanVector<XObjectPtr>                 XObjectPtrStackType;
        typedef XalanVector<ParamsVectorType>           ParamsVectorStackType;
        typedef XalanVector<UseAttributeSetIndexes>     
UseAttributeSetIndexesStackType;
        typedef XalanObjectStackCache<MutableNodeRefList>               
MutableNodeRefListStackType;
        typedef XalanObjectStackCache<XalanDOMString>                   
StringStackType;
  -     typedef XalanObjectStackCache<FormatterToText>                  
FormatterToTextStackType;
  +     typedef XalanObjectStackCache<FormatterToTextDOMString>                 
FormatterToTextStackType;
        typedef XalanObjectStackCache<FormatterToSourceTree>            
FormatterToSourceTreeStackType;
   
        /*
  
  
  

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

Reply via email to