public void waitUntilDone() throws InterruptedException, Exception {
		lock.lockInterruptibly();
		try {
			checkException();
			while (!isEmpty()) {
				tracker.waitForNext();
				checkException();
			}
		}
		finally {
			lock.unlock();
		}
	}
Waits until all items have been processed <b>OR</b> an Exception happens during the
processing of <b>ANY item</b>.
<p>
<b><u>Note:</u></b>
If an exception does occur then the remaining items in the
queue will be cleared and all current items will be cancelled.
<p>
If you wish for processing to continue for remaining items when any item encounters an
exception, then you should instead use {@link #waitForResults()}.  That method will return
all results, both with and without exceptions, which you can then process, including
checking for exceptions.  Note that to use {@link #waitForResults()} to examine exceptions,
you must have created this queue with <code>collectResults</code> as true.

@throws InterruptedException if interrupted while waiting for a result
@throws Exception any exception encountered while processing an item (this will cancel all
        items in the queue).
Ghidra/Framework/Generic/src/main/java/generic/concurrent/ConcurrentQ.java