@Override
		public void run() {
			isParsing = true;

			Thread thread = Thread.currentThread();
			String originalThreadName = thread.getName();
			try {
				thread.setName(originalThreadName + " - " + name);

				InputSource inputSource = new InputSource(input);

				// set the handlers individually instead of passing to the SaxParser convenience
				// parse() method that takes a DefaultHandler.  Otherwise, the DefaultHandler
				// will replace the XMLEntityResolver that we set up in our constructor.

				XMLReader reader = saxParser.getXMLReader();
				reader.setContentHandler(contentHandler);
				reader.setErrorHandler(contentHandler);
				reader.setDTDHandler(contentHandler);
				reader.parse(inputSource);
			}
			catch (Exception e) {
				// Note: we added this log message here to print the exception to the log.  The
				//       rationale is that, due to the threaded nature of this parser, this
				//       exception may not be discovered by clients (for example, if the client
				//       is done reading elements before the exception is encountered by this
				//       thread).  By logging it here, we can inspect the logs for ill-formatted
				//       XML content that is not manifesting a bug.   If this causes undue 
				//       noise, then we can make this a trace() call.
				//Msg.debug(this, "Exception parsing XML", e);
				ThreadedXmlPullParserImpl.this.exception = e;
			}
			finally {
				isParsing = false;
				thread.setName(originalThreadName);
				closeQueue();
			}

			try {
				input.close();
			}
			catch (IOException e) {
				// we tried
			}
		}
Disposes this XML parser. No more elements may be read after dispose is
called.
Ghidra/Framework/Generic/src/main/java/ghidra/xml/ThreadedXmlPullParserImpl.java