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

ASF GitHub Bot commented on GEODE-8475:
---------------------------------------

gesterzhou merged pull request #5492:
URL: https://github.com/apache/geode/pull/5492


   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> Resolve a potential dead lock in ParallelGatewaySenderQueue 
> ------------------------------------------------------------
>
>                 Key: GEODE-8475
>                 URL: https://issues.apache.org/jira/browse/GEODE-8475
>             Project: Geode
>          Issue Type: Improvement
>            Reporter: Xiaojian Zhou
>            Assignee: Xiaojian Zhou
>            Priority: Major
>              Labels: GeodeOperationAPI, pull-request-available
>
> When brq is created but encountered a failed GII, enqueue to it could have a 
> potential deadlock:
> Thread-1:
> ParallelGatewaySenderQueue.put() will get a 
> brq.getInitializationLock().readLock().lock() (lock-A’s read lock). Then 
> during the put operation, it will try to call lockWhenRegionIsInitializing() 
> to get failedInitialImageLock.readLock().lock (lock-B’s read lock)
> Thread-2: 
> PRDS.createBucketRegion() will trigger GII but failed. So it will call 
> cleanUpAfterFailedGII(), where it will call lockFailedInitialImageWriteLock
> () to get lock-B’s write lock first. Then call 
> BucketRegionQueue.clearEntries().
> It will call getInitializationLock().writeLock().lock() (lock-A’s write lock).
> To fix it, we need to let thread-1 to get failedInitialImageLock.readLock() 
> (lock-B) before requesting lock-A. 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to