curator-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Meni Hillel (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CURATOR-347) Shared read/write lock acquired by one thread cannot be released by another
Date Wed, 31 Aug 2016 23:59:20 GMT

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

Mime
View raw message