Skip to content

Commit

Permalink
Changed reset and destroyRequestQueue to avoid any heavy weight synch…
Browse files Browse the repository at this point in the history
…ronization methods. This should fix deadlock issue.
  • Loading branch information
jayjwylie committed Jan 15, 2013
1 parent 2b30b33 commit 2768eef
Showing 1 changed file with 15 additions and 8 deletions.
23 changes: 15 additions & 8 deletions src/java/voldemort/utils/pool/QueuedKeyedResourcePool.java
Expand Up @@ -243,11 +243,13 @@ protected void destroyRequest(AsyncResourceRequest<V> resourceRequest) {
* @param requestQueue The queue for which all resource requests are to be
* destroyed.
*/
private synchronized void destroyRequestQueue(Queue<AsyncResourceRequest<V>> requestQueue) {
AsyncResourceRequest<V> resourceRequest = requestQueue.poll();
while(resourceRequest != null) {
destroyRequest(resourceRequest);
resourceRequest = requestQueue.poll();
private void destroyRequestQueue(Queue<AsyncResourceRequest<V>> requestQueue) {
if(requestQueue != null) {
AsyncResourceRequest<V> resourceRequest = requestQueue.poll();
while(resourceRequest != null) {
destroyRequest(resourceRequest);
resourceRequest = requestQueue.poll();
}
}
}

Expand Down Expand Up @@ -283,9 +285,14 @@ public void close() {
@Override
public void reset(K key) {
// First, destroy enqueued resource requests (if any exist).
Queue<AsyncResourceRequest<V>> requestQueue = requestQueueMap.get(key);
if(requestQueue != null) {
destroyRequestQueue(requestQueue);
Queue<AsyncResourceRequest<V>> requestQueueToDestroy = requestQueueMap.get(key);
if(requestQueueToDestroy != null) {
// Swap in a new requestQueue so that the current requestQueue can
// be destroyed without the need of any synchronization primitives
Queue<AsyncResourceRequest<V>> newRequestQueue = new ConcurrentLinkedQueue<AsyncResourceRequest<V>>();
if(requestQueueMap.replace(key, requestQueueToDestroy, newRequestQueue)) {
destroyRequestQueue(requestQueueToDestroy);
}
}

// Second, destroy resources in the pool.
Expand Down

0 comments on commit 2768eef

Please sign in to comment.