sboag       01/07/13 12:09:22

  Modified:    java/src/org/apache/xalan/transformer
                        TransformerHandlerImpl.java
  Log:
  Add pauseForTransformThreadStartup.  Call this in startDocument just
  after starting the transform thread.  This should get rid of any variability
  with racing threads.
  
  Revision  Changes    Path
  1.9       +33 -0     
xml-xalan/java/src/org/apache/xalan/transformer/TransformerHandlerImpl.java
  
  Index: TransformerHandlerImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/transformer/TransformerHandlerImpl.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- TransformerHandlerImpl.java       2001/07/12 19:50:37     1.8
  +++ TransformerHandlerImpl.java       2001/07/13 19:09:18     1.9
  @@ -101,6 +101,7 @@
   {
     
     private boolean m_insideParse = false;
  +  private boolean m_hasStarted = false;
   
     ////////////////////////////////////////////////////////////////////
     // Constructors.
  @@ -207,6 +208,7 @@
      */
     protected void waitForInitialEvents()
     {
  +    m_hasStarted = true;
       
       if(m_dtm instanceof SAX2DTM)
       {
  @@ -221,6 +223,34 @@
         }
       }
     }
  +  
  +  /** 
  +   * Call co_entry_pause on the CoroutineSAXParser.
  +   */
  +  protected void pauseForTransformThreadStartup()
  +  {
  +    
  +    if(m_dtm instanceof SAX2DTM)
  +    {
  +      if(DEBUG)
  +        System.out.println("In pauseForTransformThreadStartup...");
  +      SAX2DTM sax2dtm = ((SAX2DTM)m_dtm);
  +      if(null != m_contentHandler 
  +         && m_contentHandler instanceof CoroutineSAXParser)
  +      {
  +        CoroutineSAXParser sp = (CoroutineSAXParser)m_contentHandler;
  +        try
  +        {
  +          sp.getCoroutineManager().co_entry_pause(sp.getParserCoroutineID());
  +        }
  +        catch(java.lang.NoSuchMethodException nsme)
  +        {
  +          // ignore.
  +        }
  +      }
  +    }
  +  }
  +
   
   
     ////////////////////////////////////////////////////////////////////
  @@ -428,6 +458,9 @@
           // runTransformThread is equivalent with the 2.0.1 code,
           // except that the Thread may come from a pool.
           m_transformer.runTransformThread( cpriority );
  +        pauseForTransformThreadStartup();
  +        if(false == m_hasStarted)
  +          System.err.println("Transform thread has still not started after 
pauseForTransformThreadStartup!");
         }
         
      }
  
  
  

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

Reply via email to