[ https://issues.apache.org/jira/browse/OOZIE-1922?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Azrael Seoeun updated OOZIE-1922: --------------------------------- Attachment: OOZIE-1922.3.patch OOZIE-1922.2.patch included wrong file. I upload the fixed one. > MemoryLocksService fails if lock is acquired multiple times in same thread > and released > --------------------------------------------------------------------------------------- > > Key: OOZIE-1922 > URL: https://issues.apache.org/jira/browse/OOZIE-1922 > Project: Oozie > Issue Type: Bug > Reporter: Purshotam Shah > Assignee: Azrael Seoeun > Attachments: OOZIE-1922.1.patch, OOZIE-1922.2.patch, > OOZIE-1922.3.patch > > > ReentrantLock can be acquired multiple times in same thread. For multiple > acquire call, ReentrantLock hold count is incremented by one. > So if we acquire lock multiple time from same thread, all will be successful > and hold count is increased for every call. > But if we release lock, MemoryLocksService ignore the count and deletes the > lock. Even if it's held by some command. > Simple step can reproduce it. > {code} > service.getWriteLock("test", 5000); //writeHoldCount = 1 > MemoryLockToken lock = (MemoryLockToken)service.getWriteLock("test", > 5000); //writeHoldCount = 2 > lock.release(); //writeHoldCount = 1 > lock = (MemoryLockToken)service.getWriteLock("test", 5000); > //writeHoldCount = 1, it should be 2. > {code} > {code} > @Override > public void release() { > int val = rwLock.getQueueLength(); > if (val == 0) { > synchronized (locks) { > locks.remove(resource); > } > } > lock.unlock(); > } > } > {code} > MemoryLocks should check hold count before removing lock. -- This message was sent by Atlassian JIRA (v6.3.4#6332)