diff options
author | Joakim Erdfelt | 2015-03-06 22:57:52 +0000 |
---|---|---|
committer | Joakim Erdfelt | 2015-03-06 22:57:52 +0000 |
commit | 130afb95358618bd4027f206f4915ea4d6d9bfff (patch) | |
tree | 2f1b1df1ffd511a455c948d767303ef6cb70addd /jetty-util | |
parent | 9b5205ba40e3b605dfff96b5c9e831a419d038d2 (diff) | |
parent | dd88d393e4aaf6b234c1dc00326941e7d34b6f92 (diff) | |
download | org.eclipse.jetty.project-130afb95358618bd4027f206f4915ea4d6d9bfff.tar.gz org.eclipse.jetty.project-130afb95358618bd4027f206f4915ea4d6d9bfff.tar.xz org.eclipse.jetty.project-130afb95358618bd4027f206f4915ea4d6d9bfff.zip |
Merge branch 'jetty-9.2.x'
Conflicts:
jetty-client/src/main/java/org/eclipse/jetty/client/LeakTrackingConnectionPool.java
jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientLoadTest.java
jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientUploadDuringServerShutdown.java
jetty-server/src/main/java/org/eclipse/jetty/server/HttpInput.java
jetty-spdy/spdy-server/src/test/java/org/eclipse/jetty/spdy/server/SynDataReplyDataLoadTest.java
jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/TooFastClientTest.java
Diffstat (limited to 'jetty-util')
-rw-r--r-- | jetty-util/src/main/java/org/eclipse/jetty/util/BufferUtil.java | 8 | ||||
-rw-r--r-- | jetty-util/src/main/java/org/eclipse/jetty/util/LeakDetector.java | 18 |
2 files changed, 21 insertions, 5 deletions
diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/BufferUtil.java b/jetty-util/src/main/java/org/eclipse/jetty/util/BufferUtil.java index 842e2011c7..2c01a8835e 100644 --- a/jetty-util/src/main/java/org/eclipse/jetty/util/BufferUtil.java +++ b/jetty-util/src/main/java/org/eclipse/jetty/util/BufferUtil.java @@ -463,7 +463,11 @@ public class BufferUtil public static void writeTo(ByteBuffer buffer, OutputStream out) throws IOException { if (buffer.hasArray()) - out.write(buffer.array(), buffer.arrayOffset() + buffer.position(), buffer.remaining()); + { + out.write(buffer.array(),buffer.arrayOffset() + buffer.position(),buffer.remaining()); + // update buffer position, in way similar to non-array version of writeTo + buffer.position(buffer.position() + buffer.remaining()); + } else { byte[] bytes = new byte[TEMP_BUFFER_SIZE]; @@ -946,7 +950,7 @@ public class BufferUtil * @param buffer * @return A string showing the buffer ID */ - public static void idString(ByteBuffer buffer, StringBuilder out) + private static void idString(ByteBuffer buffer, StringBuilder out) { out.append(buffer.getClass().getSimpleName()); out.append("@"); diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/LeakDetector.java b/jetty-util/src/main/java/org/eclipse/jetty/util/LeakDetector.java index 77851d9dd9..b97b521d9a 100644 --- a/jetty-util/src/main/java/org/eclipse/jetty/util/LeakDetector.java +++ b/jetty-util/src/main/java/org/eclipse/jetty/util/LeakDetector.java @@ -22,6 +22,7 @@ import java.lang.ref.PhantomReference; import java.lang.ref.ReferenceQueue; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.atomic.AtomicLong; import org.eclipse.jetty.util.component.AbstractLifeCycle; import org.eclipse.jetty.util.log.Log; @@ -63,6 +64,7 @@ public class LeakDetector<T> extends AbstractLifeCycle implements Runnable private final ReferenceQueue<T> queue = new ReferenceQueue<>(); private final ConcurrentMap<String, LeakInfo> resources = new ConcurrentHashMap<>(); + private final AtomicLong unreleasedCount = new AtomicLong(0); private Thread thread; /** @@ -81,7 +83,6 @@ public class LeakDetector<T> extends AbstractLifeCycle implements Runnable if (info != null) { // leak detected, prior acquire exists (not released) - LOG.warn("Prior Acquire from Stack",info.getStackFrames()); return false; } // normal behavior @@ -103,7 +104,7 @@ public class LeakDetector<T> extends AbstractLifeCycle implements Runnable LeakInfo info = resources.remove(id); if (info != null) { - // normal path + // normal behavior return true; } @@ -118,7 +119,7 @@ public class LeakDetector<T> extends AbstractLifeCycle implements Runnable * the resource to generate the unique ID for * @return the unique ID of the given resource */ - protected String id(T resource) + public String id(T resource) { return String.valueOf(System.identityHashCode(resource)); } @@ -169,6 +170,17 @@ public class LeakDetector<T> extends AbstractLifeCycle implements Runnable protected void leaked(LeakInfo leakInfo) { LOG.warn("Resource leaked: " + leakInfo.description,leakInfo.stackFrames); + unreleasedCount.incrementAndGet(); + } + + public void clear() + { + unreleasedCount.set(0); + } + + public long getUnreleasedCount() + { + return unreleasedCount.get(); } /** |