[ 
https://issues.apache.org/jira/browse/NIFI-526?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mark Latimer updated NIFI-526:
------------------------------
    Description: 
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.

                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();
                    }
                }


  was:
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.

                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();
                    }
                }



> 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
>
> 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.
>               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();
>                     }
>                 }



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to