Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
3.2.0
-
None
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
catch (Exception e)
{ e.printStackTrace(); } }
};
r.start();
r.join();
}