Xiaojian Zhou created GEODE-8475:
------------------------------------

             Summary: 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


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