Ate Douma pushed to branch trunk at cms-community / hippo-jackrabbit

Commits:
1b6ba625 by Julian Reschke at 2016-10-24T12:11:56+00:00
JCR-4047: NodeTypeRegistryImpl - work around (correct) animal sniffer 
diagnostics by not using ConcurrentHashMap as it's not needed here anyway

git-svn-id: https://svn.apache.org/repos/asf/jackrabbit/trunk@1766398 
13f79535-47bb-0310-9956-ffa450edef68

- - - - -
3aa270e4 by Julian Reschke at 2016-10-25T16:49:45+00:00
JCR-4033: Session leak in case of an exception inside the constructor of 
SessionImpl

ack: Nicolas Filotto 

git-svn-id: https://svn.apache.org/repos/asf/jackrabbit/trunk@1766557 
13f79535-47bb-0310-9956-ffa450edef68

- - - - -


2 changed files:

- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java
- 
jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java


Changes:

=====================================
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java
=====================================
--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java
+++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java
@@ -219,7 +219,7 @@ public class SessionImpl extends AbstractSession
      * The stack trace knows who opened this session. It is logged
      * if the session is finalized, but Session.logout() was never called.
      */
-    private Exception openStackTrace = new Exception("Stack Trace");
+    private final Exception openStackTrace;
 
     /**
      * Protected constructor.
@@ -267,14 +267,16 @@ public class SessionImpl extends AbstractSession
             this.sessionName = "session-" + count;
         }
 
-        namePathResolver = new DefaultNamePathResolver(this, this, true);
-        context.setItemStateManager(createSessionItemStateManager());
-        context.setItemManager(createItemManager());
-        context.setAccessManager(createAccessManager(subject));
-        context.setObservationManager(
-                createObservationManager(wspConfig.getName()));
+        this.namePathResolver = new DefaultNamePathResolver(this, this, true);
+        this.context.setItemStateManager(createSessionItemStateManager());
+        this.context.setItemManager(createItemManager());
+        this.context.setAccessManager(createAccessManager(subject));
+        
this.context.setObservationManager(createObservationManager(wspConfig.getName()));
 
-        versionMgr = createVersionManager();
+        this.versionMgr = createVersionManager();
+
+        // avoid building the stack trace when it won't be used anyway
+        this.openStackTrace = log.isWarnEnabled() ? new Exception("Stack 
Trace") : null;
     }
 
     /**
@@ -1363,7 +1365,12 @@ public class SessionImpl extends AbstractSession
     @Override
     public void finalize() {
         if (isLive()) {
-            log.warn("Unclosed session detected. The session was opened here: 
", openStackTrace);
+            if (openStackTrace != null) {
+                // Log a warning if and only if openStackTrace is not null
+                // indicating that the warn level is enabled and the session 
has
+                // been fully created
+                log.warn("Unclosed session detected. The session was opened 
here: ", openStackTrace);
+            }
             logout();
         }
     }


=====================================
jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java
=====================================
--- 
a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java
+++ 
b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java
@@ -27,7 +27,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
-import java.util.concurrent.ConcurrentHashMap;
 
 import javax.jcr.NamespaceRegistry;
 import javax.jcr.PropertyType;
@@ -603,8 +602,8 @@ public class NodeTypeRegistryImpl implements 
NodeTypeRegistry, EffectiveNodeType
     private class NodeTypeDefinitionMap implements Map<Name, 
QNodeTypeDefinition> {
 
         // map of node type names and node type definitions
-        private final ConcurrentHashMap<Name, QNodeTypeDefinition> 
nodetypeDefinitions =
-            new ConcurrentHashMap<Name, QNodeTypeDefinition>();
+        private Map<Name, QNodeTypeDefinition> nodetypeDefinitions =
+            new HashMap<Name, QNodeTypeDefinition>();
 
         private Collection<QNodeTypeDefinition> getValues() {
             return nodetypeDefinitions.values();



View it on GitLab: 
https://code.onehippo.org/cms-community/hippo-jackrabbit/compare/facc45ddd989053da98187f591f82f1d06a21f12...3aa270e45140334fecc1e342771db56bafd4081b
_______________________________________________
Hippocms-svn mailing list
Hippocms-svn@lists.onehippo.org
https://lists.onehippo.org/mailman/listinfo/hippocms-svn

Reply via email to