[
https://issues.apache.org/jira/browse/NIFI-526?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14503616#comment-14503616
]
Michael Moser commented on NIFI-526:
------------------------------------
Yes I see it now, the second if() should be inside the try{} block.
This code in GetHTTP follows the pattern here:
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.html
Though I think the code sample in the javadoc should acquire its read lock
(the second one) inside the finally{} block
> GetHTTP may not release writeLock
> ---------------------------------
>
> Key: NIFI-526
> URL: https://issues.apache.org/jira/browse/NIFI-526
> Project: Apache NiFi
> Issue Type: Bug
> Components: Extensions
> Affects Versions: 0.0.2
> Reporter: Mark Latimer
> Priority: Minor
> Labels: beginner, newbie
> Fix For: 0.1.0
>
>
> GetHTTP onTrigger process contains a path that will obtain and not release
> the writeLock.
> This happens if enough time elapses between the first and second check of
> timeToPersist.
> Also the readLock locked and unlocked with no meaningful work in between.
> {code:title=GetHTTP.java|borderStyle=solid}
> if ((etag != null || lastModified != null) &&
> readLock.tryLock()) {
> try {
> //first check of timeToPersist against current time
> if (timeToPersist < System.currentTimeMillis()) {
> readLock.unlock();
> //obtain writeLock
> writeLock.lock();
> //check time to persist again, this result may be
> different
> //if the result is different because enough time
> has elapsed the lock is not released
> if (timeToPersist < System.currentTimeMillis()) {
> try {
>
> ...
>
> } finally {
> readLock.lock();
> //release writeLock only if the second
> check of timeToPresist is before now.
> writeLock.unlock();
> }
> }
> }
> } finally {
> readLock.unlock();
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)