[tor-commits] [metrics-lib/master] Add an upper limit of 100 descriptors in the queue.

karsten at torproject.org karsten at torproject.org
Thu Apr 19 18:02:13 UTC 2012


commit f154c86a316cff0180ed551041927273691e5bee
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date:   Thu Apr 19 20:01:54 2012 +0200

    Add an upper limit of 100 descriptors in the queue.
---
 .../descriptor/impl/BlockingIteratorImpl.java      |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/src/org/torproject/descriptor/impl/BlockingIteratorImpl.java b/src/org/torproject/descriptor/impl/BlockingIteratorImpl.java
index c023aec..e23034a 100644
--- a/src/org/torproject/descriptor/impl/BlockingIteratorImpl.java
+++ b/src/org/torproject/descriptor/impl/BlockingIteratorImpl.java
@@ -19,13 +19,20 @@ public class BlockingIteratorImpl<T> implements Iterator<T> {
   protected BlockingIteratorImpl() {
   }
 
-  /* Add an object to the queue. */
+  /* Add an object to the queue if there's still room. */
+  final int MAX_DESCRIPTORS = 100;
   protected synchronized void add(T object) {
     if (this.outOfDescriptors) {
       throw new IllegalStateException("Internal error: Adding results to "
           + "descriptor queue not allowed after sending end-of-stream "
           + "object.");
     }
+    while (this.queue.size() >= this.MAX_DESCRIPTORS) {
+      try {
+        wait();
+      } catch (InterruptedException e) {
+      }
+    }
     this.queue.offer(object);
     notifyAll();
   }
@@ -68,6 +75,7 @@ public class BlockingIteratorImpl<T> implements Iterator<T> {
     if (this.queue.peek() == null) {
       throw new NoSuchElementException();
     }
+    notifyAll();
     return this.queue.remove();
   }
 



More information about the tor-commits mailing list