[CURATOR-347] Shared read/write lock acquired by one thread cannot be released by another
- Dominant language
- Java
- Stars
- 3.2k
- Forks
- 1.2k
- PR merge metrics
- No merged PRs in 30d
Description
Consider the following: lock is being acquired by main thread but released by another thread. This throws an exception:
java.lang.IllegalMonitorStateException: You do not own the lock: /locks/abc
at org.apache.curator.framework.recipes.locks.InterProcessMutex.release(InterProcessMutex.java:140)
Are locks thread specific? That wouldn't make sense. How else can I achieve this? Also would be nice to have a non-reentrant read/write shared lock.
public static void main(String[] args) throws Exception {
final CuratorFramework client = CuratorFrameworkFactory.builder()
.connectString(ApplicationProperties.getConfig().getMessagebusSyncServers()).sessionTimeoutMs(5000)
.connectionTimeoutMs(3000).retryPolicy(new ExponentialBackoffRetry(1000, 3)).build();
client.start();
InterProcessReadWriteLock lock = new InterProcessReadWriteLock(client, "/locks/abc");
lock.writeLock().acquire();
Thread r = new Thread() {
@Override
public void run() {
try
{
InterProcessReadWriteLock lock = new InterProcessReadWriteLock(client, "/locks/abc");
lock.writeLock().release();
}
catch (Exception e)
{
e.printStackTrace();
}
}
};
r.start();
r.join();
}
---
Originally reported by meni, imported from: Shared read/write lock acquired by one thread cannot be released by another
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.