From 3b7095b4778598b36141e6ce9777afe1ee3bbf30 Mon Sep 17 00:00:00 2001 From: Brett Wooldridge Date: Sat, 27 Sep 2014 22:29:30 +0900 Subject: [PATCH] Fixed #148 revert to using LinkedList rather than FastList in ConcurrentBag due to Tomcat leak detection. --- .../java/com/zaxxer/hikari/util/ConcurrentBag.java | 11 ++++++----- .../java/com/zaxxer/hikari/util/ConcurrentBag.java | 11 ++++++----- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/ConcurrentBag.java b/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/ConcurrentBag.java index 3359998a..5b06b17a 100644 --- a/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/ConcurrentBag.java +++ b/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/ConcurrentBag.java @@ -19,6 +19,7 @@ import static com.zaxxer.hikari.util.PoolUtilities.IS_JAVA7; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.TimeUnit; @@ -76,17 +77,17 @@ public final class ConcurrentBag void addBagItem(); } - private static final ThreadLocal>> threadList; + private static final ThreadLocal>> threadList; private final CopyOnWriteArrayList sharedList; private final Synchronizer synchronizer; private final AtomicLong sequence; private final IBagStateListener listener; static { - threadList = new ThreadLocal>>() { + threadList = new ThreadLocal>>() { @Override - protected FastList> initialValue() { - return new FastList>(WeakReference.class); + protected LinkedList> initialValue() { + return new LinkedList>(); } }; } @@ -126,7 +127,7 @@ public final class ConcurrentBag public T borrow(long timeout, final TimeUnit timeUnit) throws InterruptedException { // Try the thread-local list first - final FastList> list = threadList.get(); + final LinkedList> list = threadList.get(); for (int i = list.size(); i > 0; i--) { final BagEntry element = list.removeLast().get(); if (element != null && element.state.compareAndSet(STATE_NOT_IN_USE, STATE_IN_USE)) { diff --git a/hikaricp/src/main/java/com/zaxxer/hikari/util/ConcurrentBag.java b/hikaricp/src/main/java/com/zaxxer/hikari/util/ConcurrentBag.java index 06d23b18..8e58a5a0 100644 --- a/hikaricp/src/main/java/com/zaxxer/hikari/util/ConcurrentBag.java +++ b/hikaricp/src/main/java/com/zaxxer/hikari/util/ConcurrentBag.java @@ -17,6 +17,7 @@ package com.zaxxer.hikari.util; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.TimeUnit; @@ -75,17 +76,17 @@ public final class ConcurrentBag void addBagItem(); } - private static final ThreadLocal>> threadList; + private static final ThreadLocal>> threadList; private final CopyOnWriteArrayList sharedList; private final Synchronizer synchronizer; private final AtomicLong sequence; private final IBagStateListener listener; static { - threadList = new ThreadLocal>>() { + threadList = new ThreadLocal>>() { @Override - protected FastList> initialValue() { - return new FastList>(WeakReference.class); + protected LinkedList> initialValue() { + return new LinkedList>(); } }; } @@ -125,7 +126,7 @@ public final class ConcurrentBag public T borrow(long timeout, final TimeUnit timeUnit) throws InterruptedException { // Try the thread-local list first - final FastList> list = threadList.get(); + final LinkedList> list = threadList.get(); for (int i = list.size(); i > 0; i--) { final BagEntry element = list.removeLast().get(); if (element != null && element.state.compareAndSet(STATE_NOT_IN_USE, STATE_IN_USE)) {