You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by an...@apache.org on 2007/01/21 23:35:15 UTC

svn commit: r498471 - /cocoon/trunk/core/cocoon-pipeline/cocoon-pipeline-impl/src/main/java/org/apache/cocoon/components/pipeline/impl/AbstractCachingProcessingPipeline.java

Author: anathaniel
Date: Sun Jan 21 14:35:14 2007
New Revision: 498471

URL: http://svn.apache.org/viewvc?view=rev&rev=498471
Log:
Fix deadlock in caching pipeline when used in combination with include transformer.
fixes-bug="COCOON-1985" due-to="Ellis Pritchard"

Modified:
    cocoon/trunk/core/cocoon-pipeline/cocoon-pipeline-impl/src/main/java/org/apache/cocoon/components/pipeline/impl/AbstractCachingProcessingPipeline.java

Modified: cocoon/trunk/core/cocoon-pipeline/cocoon-pipeline-impl/src/main/java/org/apache/cocoon/components/pipeline/impl/AbstractCachingProcessingPipeline.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-pipeline/cocoon-pipeline-impl/src/main/java/org/apache/cocoon/components/pipeline/impl/AbstractCachingProcessingPipeline.java?view=diff&rev=498471&r1=498470&r2=498471
==============================================================================
--- cocoon/trunk/core/cocoon-pipeline/cocoon-pipeline-impl/src/main/java/org/apache/cocoon/components/pipeline/impl/AbstractCachingProcessingPipeline.java (original)
+++ cocoon/trunk/core/cocoon-pipeline/cocoon-pipeline-impl/src/main/java/org/apache/cocoon/components/pipeline/impl/AbstractCachingProcessingPipeline.java Sun Jan 21 14:35:14 2007
@@ -171,7 +171,8 @@
                     lock = transientStore.get(lockKey);
                 }
             }
-            if(lock != null) {
+            // Avoid deadlock with self (see JIRA COCOON-1985).
+            if(lock != null && lock != Thread.currentThread()) {
                 try {
                     // become owner of monitor
                     synchronized(lock) {
@@ -207,7 +208,7 @@
                         getLogger().debug("Lock already present in the store!");
                     }
                 } else {
-                    Object lock = new Object();
+                    Object lock = Thread.currentThread();
                     try {
                         transientStore.store(lockKey, lock);
                     } catch (IOException e) {