code: public void run()
    {
      // Guard against direct invocation of start().
      if(fXMLReader==null) return;
  
      if(DEBUG)System.out.println("IncrementalSAXSource_Filter parse thread launched");
  
      // Initially assume we'll run successfully.
      Object arg=Boolean.FALSE;
  
      // For the duration of this operation, all coroutine handshaking
      // will occur in the co_yield method. That's the nice thing about
      // coroutines; they give us a way to hand off control from the
      // middle of a synchronous method.
      try
      {
        fXMLReader.parse(fXMLReaderInputSource);
      }
      catch(IOException ex)
      {
        arg=ex;
      }
      catch(StopException ex)
      {
        // Expected and harmless
        if(DEBUG)System.out.println("Active IncrementalSAXSource_Filter normal stop exception");
      }
      catch (SAXException ex)
      {
        Exception inner=ex.getException();
        if(inner instanceof StopException){
          // Expected and harmless
          if(DEBUG)System.out.println("Active IncrementalSAXSource_Filter normal stop exception");
        }
        else
        {
          // Unexpected malfunction
          if(DEBUG)
          {
            System.out.println("Active IncrementalSAXSource_Filter UNEXPECTED SAX exception: "+inner);
            inner.printStackTrace();
          }                
          arg=ex;
        }
      } // end parse
      
      // Mark as no longer running in thread.
      fXMLReader=null;
  
      try
      {
        // Mark as done and yield control to the controller coroutine
        fNoMoreEvents=true;
        fCoroutineManager.co_exit_to(arg, fSourceCoroutineID,
                                     fControllerCoroutineID);
      }
      catch(java.lang.NoSuchMethodException e)
      {
        // Shouldn't happen unless we've miscoded our coroutine logic
        // "CPO, shut down the garbage smashers on the detention level!"
        e.printStackTrace(System.err);
        fCoroutineManager.co_exit(fSourceCoroutineID);
      }
    }
docs: /* Thread logic to support startParseThread()