endless wait in BlockingIteratorImpl
As reported by David:
Onionoo updater didn't stop after supposedly successful run.
Here's the relevant thread dump part:
"Thread-0" #8 prio=5 os_prio=0 tid=0x00007f0d602f4000 nid=0x21a7 in Object.wait() [0x00007f0d435e0000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000007157e4ee0> (a org.torproject.descriptor.impl.BlockingIteratorImpl)
at java.lang.Object.wait(Object.java:502)
at org.torproject.descriptor.impl.BlockingIteratorImpl.add(BlockingIteratorImpl.java:40)
- locked <0x00000007157e4ee0> (a org.torproject.descriptor.impl.BlockingIteratorImpl)
at org.torproject.descriptor.impl.DescriptorReaderImpl$DescriptorReaderRunnable.readDescriptors(DescriptorReaderImpl.java:291)
at org.torproject.descriptor.impl.DescriptorReaderImpl$DescriptorReaderRunnable.run(DescriptorReaderImpl.java:188)
at java.lang.Thread.run(Thread.java:745)
This is the while loop in BlockingIteratorImpl.add
while (this.queue.size() >= this.maxQueueSize) {
try {
wait();
} catch (InterruptedException e) {
/* nothing to be done */
}
}
As there are no consumers anymore and the queue is full the while-loop doesn't stop.