Use PhantomReference insteadof WeakReference for resource leak detection

This commit is contained in:
Trustin Lee 2013-02-09 12:14:52 +09:00
parent 42b21222dc
commit 09b022e926

View File

@ -20,8 +20,8 @@ import io.netty.logging.InternalLogger;
import io.netty.logging.InternalLoggerFactory; import io.netty.logging.InternalLoggerFactory;
import io.netty.util.internal.SystemPropertyUtil; import io.netty.util.internal.SystemPropertyUtil;
import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue; import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
@ -131,6 +131,8 @@ public final class ResourceLeakDetector<T> {
break; break;
} }
ref.clear();
if (!ref.close()) { if (!ref.close()) {
continue; continue;
} }
@ -141,7 +143,7 @@ public final class ResourceLeakDetector<T> {
} }
} }
private final class DefaultResourceLeak extends WeakReference<Object> implements ResourceLeak { private final class DefaultResourceLeak extends PhantomReference<Object> implements ResourceLeak {
private final ResourceLeakException exception; private final ResourceLeakException exception;
private final AtomicBoolean freed; private final AtomicBoolean freed;