Author: reto
Date: Thu Sep 23 13:32:26 2010
New Revision: 1000460

URL: http://svn.apache.org/viewvc?rev=1000460&view=rev
Log:
CLEREZZA-307: fixed synchronization issue causing nullpointer and unavailable 
renderlet exception

Modified:
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletRendererFactoryImpl.java

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletRendererFactoryImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletRendererFactoryImpl.java?rev=1000460&r1=1000459&r2=1000460&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletRendererFactoryImpl.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletRendererFactoryImpl.java
 Thu Sep 23 13:32:26 2010
@@ -233,7 +233,9 @@ public class RenderletRendererFactoryImp
                } finally {
                        l.unlock();
                }
-               type2DefinitionMap = null;
+               synchronized (this) {
+                       type2DefinitionMap = null;
+               }
        }
 
        private void removeExisting(UriRef rdfType, String mode,
@@ -366,18 +368,20 @@ public class RenderletRendererFactoryImp
        }
 
        private Map<UriRef, RenderletDefinition[]> getType2DefinitionMap() {
-               if (type2DefinitionMap == null) {
+               Map<UriRef, RenderletDefinition[]> result = type2DefinitionMap;
+               if (result == null) {
                        synchronized(this) {
                                if (type2DefinitionMap == null) {
-                                       createType2DefinitionMap();
+                                       type2DefinitionMap = 
createType2DefinitionMap();
                                }
+                               result = type2DefinitionMap;
                        }
                }
-               return type2DefinitionMap;
+               return result;
        }
 
-       private void createType2DefinitionMap() {
-               type2DefinitionMap = new HashMap<UriRef, 
RenderletDefinition[]>(50);
+       private Map<UriRef, RenderletDefinition[]> createType2DefinitionMap() {
+               Map<UriRef, RenderletDefinition[]> result = new HashMap<UriRef, 
RenderletDefinition[]>(50);
                Lock l = configGraph.getLock().readLock();
                for (Resource prioRdfType : rdfTypePrioList) {
                        l.lock();
@@ -390,12 +394,13 @@ public class RenderletRendererFactoryImp
                                                        new 
RenderletDefinition((BNode) renderletDefs.next().getSubject(),
                                                        configGraph));
                                }
-                               type2DefinitionMap.put((UriRef) prioRdfType,
+                               result.put((UriRef) prioRdfType,
                                                definitionList.toArray(new 
RenderletDefinition[definitionList.size()]));
                        } finally {
                                l.unlock();
                        }
                }
+               return result;
        }
 
        /**


Reply via email to