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