sboag       00/10/17 11:56:44

  Modified:    java/src/org/apache/xalan/stree SourceTreeHandler.java
  Log:
  Only notify every 10 events or so (this number needs to be controleable by an 
application).
  When the parse thread is done use the join() function to block until the 
transform thread is complete.
  
  Revision  Changes    Path
  1.13      +24 -17    
xml-xalan/java/src/org/apache/xalan/stree/SourceTreeHandler.java
  
  Index: SourceTreeHandler.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/stree/SourceTreeHandler.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- SourceTreeHandler.java    2000/10/13 02:33:11     1.12
  +++ SourceTreeHandler.java    2000/10/17 18:56:44     1.13
  @@ -130,13 +130,22 @@
     
     private boolean indexedLookup = false;      // for now 
     
  +  private int m_eventsCount = 0;
  +  private int m_maxEventsToNotify = 10;
  +  
     private void notifyWaiters()
     {
  -    Object synchObj = getSynchObject();
  -    synchronized (synchObj)
  -    {      
  -      synchObj.notifyAll();
  +    if(m_useMultiThreading && (m_eventsCount >= m_maxEventsToNotify))
  +    {
  +      Object synchObj = getSynchObject();
  +      synchronized (synchObj)
  +      {      
  +        synchObj.notifyAll();
  +      }
  +      m_eventsCount = 0;
       }
  +    else
  +      m_eventsCount++;
     }
     
       
  @@ -181,6 +190,7 @@
         {
           m_transformer.setSourceTreeDocForThread(m_root);
           Thread t = new Thread(m_transformer);
  +        m_transformer.setTransformThread(t);
           t.start();
         }
       }
  @@ -206,25 +216,22 @@
           m_transformer.transformNode(m_root);
         }
       }
  +    m_eventsCount = m_maxEventsToNotify;
       notifyWaiters();
       
       if(m_useMultiThreading && (null != m_transformer))
       {
  -      // Since the transform is on the secondary thread, we 
  -      // can't really exit until it is done, so we wait...
  -      // System.out.println("m_transformer.isTransformDone():" + 
m_transformer.isTransformDone());
  -      while(!m_transformer.isTransformDone())
  +      Thread transformThread = m_transformer.getTransformThread();
  +      if(null != transformThread)
         {
  -        synchronized(synchObj)
  +        try
           {
  -          try
  -          {
  -            // System.out.println("Waiting...");
  -            synchObj.wait();
  -          }
  -          catch(InterruptedException ie)
  -          {
  -          }
  +          // This should wait until the transformThread is considered not 
alive.
  +          transformThread.join();
  +          m_transformer.setTransformThread(null);
  +        }
  +        catch(InterruptedException ie)
  +        {
           }
         }
       }
  
  
  

Reply via email to