From 5e2e4584694ff9dae81d63cda1ab366335f6b875 Mon Sep 17 00:00:00 2001 From: gojomo Date: Thu, 14 Jul 2011 06:24:14 +0000 Subject: [PATCH] * StoredQueue (size) more robust against concurrent emptying --- commons/src/main/java/org/archive/bdb/StoredQueue.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/commons/src/main/java/org/archive/bdb/StoredQueue.java b/commons/src/main/java/org/archive/bdb/StoredQueue.java index acf571ac..0009db8b 100644 --- a/commons/src/main/java/org/archive/bdb/StoredQueue.java +++ b/commons/src/main/java/org/archive/bdb/StoredQueue.java @@ -22,6 +22,7 @@ package org.archive.bdb; import java.io.Serializable; import java.util.AbstractQueue; import java.util.Iterator; +import java.util.NoSuchElementException; import java.util.concurrent.atomic.AtomicLong; import java.util.logging.Logger; @@ -92,9 +93,15 @@ public class StoredQueue extends AbstractQueue { @Override public int size() { try { - return queueMap.isEmpty() ? 0 : (int)(tailIndex.get() - queueMap.firstKey()); + return Math.max(0, + (int)(tailIndex.get() + - queueMap.firstKey())); } catch (IllegalStateException ise) { return 0; + } catch (NoSuchElementException nse) { + return 0; + } catch (NullPointerException npe) { + return 0; } }