From 3be9941f763e732d435e3d04bc169153713040fc Mon Sep 17 00:00:00 2001 From: gojomo Date: Mon, 8 Nov 2010 18:54:03 +0000 Subject: [PATCH] Resolve deadlock seen after latest changes * AbstractFrontier (drainInbound) don't assume current thread will be able to take() full batch; poll() and exit early if other threads have drained queue first --- .../java/org/archive/crawler/frontier/AbstractFrontier.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/engine/src/main/java/org/archive/crawler/frontier/AbstractFrontier.java b/engine/src/main/java/org/archive/crawler/frontier/AbstractFrontier.java index ab9981ba..9551661e 100644 --- a/engine/src/main/java/org/archive/crawler/frontier/AbstractFrontier.java +++ b/engine/src/main/java/org/archive/crawler/frontier/AbstractFrontier.java @@ -473,7 +473,10 @@ public abstract class AbstractFrontier protected void drainInbound() throws InterruptedException { int batch = inbound.size(); for(int i = 0; i < batch; i++) { - InEvent ev = inbound.take(); + InEvent ev = inbound.poll(); + if(ev==null) { + break; + } synchronized(this) { ev.process(); }