Fix potential race condition in MRUCache

This commit is contained in:
Luck 2020-06-21 22:07:53 +01:00
parent 6cb0f5e810
commit 21ae1dbac0
No known key found for this signature in database
GPG Key ID: EFA9B3EC5FD90F8B

View File

@ -46,13 +46,21 @@ public abstract class MRUCache<T> {
}
protected void offerRecent(int validAt, T offer) {
if (validAt == this.modCount.get()) {
this.recent = offer;
synchronized (this) {
if (validAt == this.modCount.get()) {
this.recent = offer;
}
}
}
/**
* Calling clearRecent effectively resets the instance. any other threads going to call
* offerRecent in the future with the previous mod count will be ignored.
*/
protected void clearRecent() {
this.recent = null;
this.modCount.incrementAndGet();
synchronized (this) {
this.recent = null;
this.modCount.incrementAndGet();
}
}
}