DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23486>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23486

[PATCH] Race condition in MountNode.invoke

           Summary: [PATCH] Race condition in MountNode.invoke
           Product: Cocoon 2
           Version: Current CVS 2.1
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Minor
          Priority: Other
         Component: core
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


MountNode.invoke does an unsynchronized processors.get whilst another thread 
could do a processors.put inside MountNode.getProcessor.  (The synchronized on 
getProcessor only provides protection for write/write race conditions.)

The time window is very small and only likely to occur for a high hit-rate on a 
site with many map:mount sub-sitemaps.  (I haven't seen the bug in action, just 
came across it during source inspection chasing another problem.)

Nevertheless, here the patch:

diff -u -r1.5 MountNode.java
--- components/treeprocessor/sitemap/MountNode.java     2003/07/10 13:17:00    
1.5
+++ components/treeprocessor/sitemap/MountNode.java     2003/09/29 15:32:28
@@ -106,10 +106,7 @@
         Map objectModel = env.getObjectModel();
 
         String resolvedSource = this.source.resolve(context, objectModel);
-        TreeProcessor processor = (TreeProcessor)processors.get
(resolvedSource);
-        if (processor == null) {
-            processor = getProcessor(env, resolvedSource);
-        }
+        TreeProcessor processor = getProcessor(env, resolvedSource);
 
         String resolvedPrefix = this.prefix.resolve(context, objectModel);

Reply via email to