Julien MASSENET created FELIX-3545: -------------------------------------- Summary: Memory leak when unregistering a component used by an aggregate dependency with an unbind callback Key: FELIX-3545 URL: https://issues.apache.org/jira/browse/FELIX-3545 Project: Felix Issue Type: Bug Components: iPOJO Affects Versions: ipojo-core-1.8.2 Environment: Felix distribution 4.0.2, iPojo 1.8.2, Oracle JVM 1.6.0_u31, W7x64 Reporter: Julien MASSENET
When using aggregate dependencies in an iPojo instance, any injected dependency instance that is unbound when using an unbind callback will leak in memory. How to reproduce using the attached sample project: - Build the provided bundles using maven (mvn clean install) - Start the OSGi environment, install and start the two bundle (consumer and provider) > The consumer bundle prints: 'Binding a new service; it says 'Bonjour !'' - Uninstall the provider bundle > The consumer bundle prints: 'Unbinding a service; it says 'Au revoir !'' - Take a heap dump using you favorite tool (VisualVM snapshot is provided) - Search for instances of provider.french.impl.FrenchGreet Expected result: - No instances can be found Actual result: - One instance is found Using svn revision 1349288 as the reference, here is my understanding of the issue: The problem lies in the org.apache.felix.ipojo.util.DependencyModel.manageDeparture(ServiceReference, Object) method. The service instance is removed from the m_serviceObjects map as the first step into the method, which is the expected behavior. Later, the onServiceDeparture method is called, which finally invokes the org.apache.felix.ipojo.handlers.dependency.Dependency.invokeCallback(DependencyCallback, ServiceReference, Object) method. In this method, a call to org.apache.felix.ipojo.util.DependencyModel.getService(ServiceReference) is made, which puts back the instance in the m_serviceObjects map. This reference can never be cleared (unless the provider also goes away, in which case all instances are released), thus resulting in a leak. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira