In blocking hash map, don't remove locks if the value has been replaced
Dieser Commit ist enthalten in:
Ursprung
6019ab177c
Commit
b1b6e9ec20
@ -26,6 +26,7 @@ import java.util.concurrent.TimeUnit;
|
||||
import com.google.common.cache.Cache;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.CacheLoader;
|
||||
import com.google.common.cache.RemovalCause;
|
||||
import com.google.common.cache.RemovalListener;
|
||||
import com.google.common.cache.RemovalNotification;
|
||||
|
||||
@ -69,8 +70,10 @@ public class BlockingHashMap<TKey, TValue> {
|
||||
@Override
|
||||
public void onRemoval(RemovalNotification<TKey, TValue> entry) {
|
||||
// Clean up locks too
|
||||
if (entry.getCause() != RemovalCause.REPLACED) {
|
||||
locks.remove(entry.getKey());
|
||||
}
|
||||
}
|
||||
}).build(
|
||||
BlockingHashMap.<TKey, TValue>newInvalidCacheLoader()
|
||||
);
|
||||
|
@ -93,7 +93,7 @@ public abstract class AbstractInputStreamLookup {
|
||||
|
||||
/**
|
||||
* Associate a given socket address to the provided socket injector.
|
||||
* @param input - the socket address to associate.
|
||||
* @param address - the socket address to associate.
|
||||
* @param injector - the injector.
|
||||
*/
|
||||
public abstract void setSocketInjector(SocketAddress address, SocketInjector injector);
|
||||
|
@ -88,7 +88,7 @@ class InputStreamReflectLookup extends AbstractInputStreamLookup {
|
||||
@Override
|
||||
public SocketInjector waitSocketInjector(InputStream input) {
|
||||
try {
|
||||
SocketAddress address = getSocketAddress(input);
|
||||
SocketAddress address = waitSocketAddress(input);
|
||||
|
||||
// Guard against NPE
|
||||
if (address != null)
|
||||
@ -106,10 +106,10 @@ class InputStreamReflectLookup extends AbstractInputStreamLookup {
|
||||
* @return The underlying socket address, or NULL if not found.
|
||||
* @throws IllegalAccessException Unable to access socket field.
|
||||
*/
|
||||
private SocketAddress getSocketAddress(InputStream stream) throws IllegalAccessException {
|
||||
private SocketAddress waitSocketAddress(InputStream stream) throws IllegalAccessException {
|
||||
// Extra check, just in case
|
||||
if (stream instanceof FilterInputStream)
|
||||
return getSocketAddress(getInputStream((FilterInputStream) stream));
|
||||
return waitSocketAddress(getInputStream((FilterInputStream) stream));
|
||||
|
||||
SocketAddress result = inputLookup.get(stream);
|
||||
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren