You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by "Mark Payne (JIRA)" <ji...@apache.org> on 2015/04/20 17:46:59 UTC

[jira] [Commented] (NIFI-526) GetHTTP may not release writeLock

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

Mark Payne commented on NIFI-526:
---------------------------------

Mark,

Your assessment is very accurate :) Thanks for calling this out!

> GetHTTP may not release writeLock
> ---------------------------------
>
>                 Key: NIFI-526
>                 URL: https://issues.apache.org/jira/browse/NIFI-526
>             Project: Apache NiFi
>          Issue Type: Bug
>          Components: Core Framework
>    Affects Versions: 0.0.2
>            Reporter: Mark Latimer
>            Priority: Minor
>              Labels: beginner, newbie
>
> 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)