sboag       01/01/24 08:13:06

  Modified:    java/src/org/apache/xalan/transformer TransformerImpl.java
  Log:
  Try and avoid multiple resets on exit.
  
  Revision  Changes    Path
  1.76      +40 -27    
xml-xalan/java/src/org/apache/xalan/transformer/TransformerImpl.java
  
  Index: TransformerImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/transformer/TransformerImpl.java,v
  retrieving revision 1.75
  retrieving revision 1.76
  diff -u -r1.75 -r1.76
  --- TransformerImpl.java      2001/01/11 05:05:31     1.75
  +++ TransformerImpl.java      2001/01/24 16:13:05     1.76
  @@ -349,6 +349,8 @@
      */
     boolean m_isTransformDone = false;
     
  +  private boolean m_hasBeenReset = false;
  +  
     //==========================================================
     // SECTION: Constructors
     //==========================================================
  @@ -372,29 +374,33 @@
      */
     public void reset()
     {
  -
  -    // I need to look more carefully at which of these really
  -    // needs to be reset.
  -    m_countersTable = null;
  -    m_stackGuard = new StackGuard();
  -
  -    getXPathContext().reset();
  -    getXPathContext().getVarStack().setSize(1);
  -    m_currentTemplateElements.removeAllElements();
  -    m_currentMatchTemplates.removeAllElements();
  -
  -    m_resultTreeHandler = null;
  -    m_keyManager = new KeyManager();
  -    m_attrSetStack = null;
  -    m_countersTable = null;
  -    m_currentTemplateRuleIsNull = new BoolStack();
  -    m_xmlSource = null;
  -    m_doc = null;
  -    m_isTransformDone = false;
  -    m_inputContentHandler = null;
  -    
  -    // For now, reset the document cache each time.
  -    getXPathContext().getSourceTreeManager().reset();
  +    if(!m_hasBeenReset)
  +    {
  +      m_hasBeenReset = true;
  +  
  +      // I need to look more carefully at which of these really
  +      // needs to be reset.
  +      m_countersTable = null;
  +      m_stackGuard = new StackGuard();
  +  
  +      getXPathContext().reset();
  +      getXPathContext().getVarStack().setSize(1);
  +      m_currentTemplateElements.removeAllElements();
  +      m_currentMatchTemplates.removeAllElements();
  +  
  +      m_resultTreeHandler = null;
  +      m_keyManager = new KeyManager();
  +      m_attrSetStack = null;
  +      m_countersTable = null;
  +      m_currentTemplateRuleIsNull = new BoolStack();
  +      m_xmlSource = null;
  +      m_doc = null;
  +      m_isTransformDone = false;
  +      m_inputContentHandler = null;
  +      
  +      // For now, reset the document cache each time.
  +      getXPathContext().getSourceTreeManager().reset();
  +    }
       
   //    m_reportInPostExceptionFromThread = false;
     }
  @@ -649,6 +655,7 @@
       }
       finally
       {
  +      // This looks to be redundent to the one done in TransformNode.
         reset();
       }
     }
  @@ -1078,7 +1085,6 @@
     public void transform(Source xmlSource, Result outputTarget)
             throws TransformerException
     {
  -
       ContentHandler handler = createResultContentHandler(outputTarget);
   
       this.setContentHandler(handler);
  @@ -1115,6 +1121,7 @@
      */
     public void transformNode(Node node) throws TransformerException
     {
  +    m_hasBeenReset = false;
   
       try
       {
  @@ -1154,8 +1161,7 @@
         if (null != m_resultTreeHandler)
         {
           m_resultTreeHandler.endDocument();
  -      }
  -      this.reset();
  +      }   
       }
       catch (Exception se)
       {
  @@ -1174,6 +1180,10 @@
         }
         throw new TransformerException(se.getMessage(), se);
       }
  +    finally
  +    {
  +      this.reset();
  +    }
     }
     
     /**
  @@ -2704,7 +2714,9 @@
      */
     public Thread createTransformThread()
     {
  -    return new Thread(this);
  +    Thread t = new Thread(this);
  +    // System.out.println("created thread: "+t.getName());
  +    return t;
     }
   
     /**
  @@ -2796,6 +2808,7 @@
      */
     public void run()
     {
  +    m_hasBeenReset = false;
   
       try
       {
  
  
  

Reply via email to