diff --git a/core/src/main/java/com/google/bitcoin/utils/Threading.java b/core/src/main/java/com/google/bitcoin/utils/Threading.java index d32e9bd1..072a73a7 100644 --- a/core/src/main/java/com/google/bitcoin/utils/Threading.java +++ b/core/src/main/java/com/google/bitcoin/utils/Threading.java @@ -84,10 +84,10 @@ public class Threading { private static final Logger log = LoggerFactory.getLogger(UserThread.class); private LinkedBlockingQueue tasks; - public UserThread(int tasksBound) { + public UserThread() { super("bitcoinj user thread"); setDaemon(true); - tasks = new LinkedBlockingQueue(tasksBound); + tasks = new LinkedBlockingQueue(); start(); } @@ -108,13 +108,12 @@ public class Threading { @Override public void execute(Runnable command) { - // Will block if the event thread is saturated. - if (!tasks.offer(command)) { - log.warn("User thread saturated, check for deadlocked or slow event handlers. Sample tasks:"); + if (tasks.size() > 100) { + log.warn("User thread saturated, memory exhaustion may occur."); + log.warn("Check for deadlocked or slow event handlers. Sample tasks:"); for (Object task : tasks.toArray()) log.warn(task.toString()); - // Try again and wait this time. - Uninterruptibles.putUninterruptibly(tasks, command); } + Uninterruptibles.putUninterruptibly(tasks, command); } } @@ -124,7 +123,7 @@ public class Threading { // from that point onwards. throwOnLockCycles(); - USER_THREAD = new UserThread(100); // 100 pending event listeners to avoid memory blowup. + USER_THREAD = new UserThread(); SAME_THREAD = new Executor() { @Override public void execute(@Nonnull Runnable runnable) {