[
https://jira.jboss.org/browse/ISPN-771?page=com.atlassian.jira.plugin.sys...
]
Paul Ferraro updated ISPN-771:
------------------------------
Attachment: patch.txt
When an app is undeployed, the backing cache is stopped, but its cache manager is not (the
cache manager is shared across all apps). Consequently, TransactionTable is not removing
it's ViewChanged listener (that was added in start()) on stop(). The attached patch
to TransactionTable makes start() and stop() symmetrical.
org.infinispan.notifications.AbstractListenerImpl.listenersMap
ViewChanged entries keep increasing during start/stop/start/stop cycle (AS application
deploy/undeploy)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Key: ISPN-771
URL:
https://jira.jboss.org/browse/ISPN-771
Project: Infinispan
Issue Type: Bug
Reporter: Scott Marlow
Assignee: Scott Marlow
Fix For: 4.2.0.CR1
Attachments: all-clleak-simple.sh, patch.txt
org.infinispan.notifications.AbstractListenerImpl.listenersMap has a
org.infinispan.notifications.cachemanagerlistener.annotation.ViewChanged that is
always increasing number of entries (per deploy/undeploy with AS)
[0]org.infinispan.notifications.AbstractListenerImpl$ListenerInvocation.target =
org.infinispan.transaction.xa.TransactionTable$StaleTransactionCleanup
[1]org.infinispan.notifications.AbstractListenerImpl$ListenerInvocation.target =
org.infinispan.transaction.xa.TransactionTable$StaleTransactionCleanup
[2]org.infinispan.notifications.AbstractListenerImpl$ListenerInvocation.target =
org.infinispan.transaction.xa.TransactionTable$StaleTransactionCleanup
[3]org.infinispan.notifications.AbstractListenerImpl$ListenerInvocation.target =
org.infinispan.transaction.xa.TransactionTable$StaleTransactionCleanup
[4]org.infinispan.notifications.AbstractListenerImpl$ListenerInvocation.target =
org.infinispan.transaction.xa.TransactionTable$StaleTransactionCleanup
[N]org.infinispan.notifications.AbstractListenerImpl$ListenerInvocation.target =
org.infinispan.transaction.xa.TransactionTable$StaleTransactionCleanup
keeps increasing until we run out of memory
Looks like we miss removing these because:
org.infinispan.notifications.AbstractListenerImpl.removeListenerInvocation
private void removeListenerInvocation(Class<? extends Annotation> annotation,
Object listener) {
if (listener == null) return;
List<ListenerInvocation> l = getListenerCollectionForAnnotation(annotation);
Set<Object> markedForRemoval = new HashSet<Object>();
for (ListenerInvocation li : l) {
if (listener.equals(li.target)) markedForRemoval.add(li); // NEVER EQUALS
}
l.removeAll(markedForRemoval);
}
listener =
org.jboss.web.tomcat.service.session.distributedcache.ispn.DefaultLockManagerSource@1d2d2db8
0:li.target=org.infinispan.transaction.xa.TransactionTable$StaleTransactionCleanup@2eedd32f
1:li.target=org.infinispan.transaction.xa.TransactionTable$StaleTransactionCleanup@18b9ae20
2:li.target=org.infinispan.transaction.xa.TransactionTable$StaleTransactionCleanup@226d7ba7
... same li.target class for all entries, so they don't get removed
class org.jboss.web.tomcat.service.session.distributedcache.ispn.DefaultLockManagerSource
implements LockManagerSource
class org.infinispan.transaction.xa.TransactionTable.StaleTransactionCleanup is a pojo
with onViewChange method.
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira