Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoakim Erdfelt2015-03-06 22:57:52 +0000
committerJoakim Erdfelt2015-03-06 22:57:52 +0000
commit130afb95358618bd4027f206f4915ea4d6d9bfff (patch)
tree2f1b1df1ffd511a455c948d767303ef6cb70addd /jetty-util
parent9b5205ba40e3b605dfff96b5c9e831a419d038d2 (diff)
parentdd88d393e4aaf6b234c1dc00326941e7d34b6f92 (diff)
downloadorg.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.java8
-rw-r--r--jetty-util/src/main/java/org/eclipse/jetty/util/LeakDetector.java18
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();
}
/**

Back to the top