Thomas Mueller created OAK-3234:
-----------------------------------
Summary: LIRS cache: possible deadlock while loading an entry
Key: OAK-3234
URL: https://issues.apache.org/jira/browse/OAK-3234
Project: Jackrabbit Oak
Issue Type: Bug
Reporter: Thomas Mueller
Assignee: Thomas Mueller
Fix For: 1.3.4
If multiple threads concurrently load entries while they are already loading
entries (using a cache loader or callable), then it is possible to get into a
deadlock. For example:
* Thread 1 loads entry A, so it is calling the loader...
* Thread 2 loads entry B, so it is calling the loader...
* Thread 1 (within the loader) tries to load entry B, so it waits for thread
2...
* Thread 2 (within the loader) tries to load entry A, so it waits for thread
1...
One solution is to detect the case that the current thread is already loading
an entry, and then instead of waiting for the other thread, it can also load
the entry. A small optimization for that is to only load the entry (not waiting
for the other thread) if the hash code of the key is smaller or equal the entry
that this thread is loading. So that there is a clear order.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)