[ 
https://issues.apache.org/jira/browse/CURATOR-347?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15453786#comment-15453786
 ] 

Meni Hillel commented on CURATOR-347:
-------------------------------------

Also should add, this works perfectly fine with InterProcessSemaphoreMutex. 
Question is why are these two behave different...?

I need non-reentrant, read/write lock which are thread agnostic.

> 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)

Reply via email to