Details
-
Bug
-
Resolution: Done
-
Major
-
9.0.0.Final
-
None
Description
In ClusterExpirationManager.handleLifespanExpireEntry the value for removeExpired is retrieved in the Runnable, which is not executed under synchronized
block. There is a comment in CEM.handleInMemoryExpiration about the need
for synchronization, but it seems to me that the Cache.removeExpired
does not get the value we're checking the metadata for - there is a
window when the value can change after we've checked the expiration.
The value should stored in local variable while under synchronization, and captured in the Runnable/lambda.