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

Mark Latimer commented on NIFI-526:
-----------------------------------

Mike,

You are right I was making an error in my analysis that simple passage of time 
could cause an issue. I agree if check one was true then check two will be true 
as well unless the thread is interupted between the readLock unlock and the 
writeLock lock.

It is worth mentioning this issue is from a findbugs pass over the codebase and 
quick review, I am not claiming to have seen a GetHTTP processor deadlock 
because of this.

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

Reply via email to