Cache now no longer locked from reading while writing.
Fixed another case where writing is followed by consecutive reading.
This commit is contained in:
parent
c60e94728e
commit
387393632d
@ -22,14 +22,15 @@ class CacheUsageStack<K, V> {
|
||||
}
|
||||
|
||||
private void removeValueFromStack(CacheValue<K, V> value) {
|
||||
if (value == null) throw new IllegalStateException("Current size is supposed to be " + size);
|
||||
if (value.front != null) {
|
||||
value.front.back = value.back;
|
||||
} else if (first == value) {
|
||||
} else {
|
||||
first = value.back;
|
||||
}
|
||||
if (value.back != null) {
|
||||
value.back.front = value.front;
|
||||
} else if (last == value) {
|
||||
} else {
|
||||
last = value.front;
|
||||
}
|
||||
value.front = null;
|
||||
@ -66,6 +67,7 @@ class CacheUsageStack<K, V> {
|
||||
lock.lock();
|
||||
try {
|
||||
addValueToStackTop(value);
|
||||
value.detached = false;
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
@ -98,4 +100,15 @@ class CacheUsageStack<K, V> {
|
||||
public int size() {
|
||||
return size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder stringBulder = new StringBuilder();
|
||||
CacheValue<K, V> current = first;
|
||||
while (current != null) {
|
||||
stringBulder.append(first + "\n");
|
||||
current = current.back;
|
||||
}
|
||||
return stringBulder.toString();
|
||||
}
|
||||
}
|
@ -19,5 +19,6 @@ class CacheValue<KeyType, ValueType> {
|
||||
/**
|
||||
* Whether or not this value is detached from the cache's hashmap.
|
||||
*/
|
||||
public volatile boolean detached;
|
||||
public volatile boolean detached = true;
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user