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;
}
/**