[
https://issues.apache.org/jira/browse/CURATOR-347?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15606562#comment-15606562
]
Cameron McKenzie commented on CURATOR-347:
------------------------------------------
The InterprocessReadWriteLock works per thread due to it using underlying
InterprocessMutexes for the read and write locks.
Currently, I'm unaware of a thread agnostic read / write lock that's part of
Curator. I think that it would be possible to refactor the
InterprocessReadWriteLock to support both per thread or per JVM locks.
> Shared read/write lock acquired by one thread cannot be released by another
> ---------------------------------------------------------------------------
>
> Key: CURATOR-347
> URL: https://issues.apache.org/jira/browse/CURATOR-347
> Project: Apache Curator
> Issue Type: Bug
> Components: Recipes
> Affects Versions: 3.2.0
> Reporter: Meni Hillel
> Fix For: awaiting-response
>
>
> 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();
> }
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)