Return-Path: Delivered-To: apmail-felix-commits-archive@www.apache.org Received: (qmail 56647 invoked from network); 12 Jan 2011 21:11:10 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 12 Jan 2011 21:11:10 -0000 Received: (qmail 82797 invoked by uid 500); 12 Jan 2011 21:11:10 -0000 Delivered-To: apmail-felix-commits-archive@felix.apache.org Received: (qmail 82725 invoked by uid 500); 12 Jan 2011 21:11:09 -0000 Mailing-List: contact commits-help@felix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@felix.apache.org Delivered-To: mailing list commits@felix.apache.org Received: (qmail 82718 invoked by uid 99); 12 Jan 2011 21:11:09 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 12 Jan 2011 21:11:09 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 12 Jan 2011 21:11:08 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 4E48323889E9; Wed, 12 Jan 2011 21:10:42 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1058320 - in /felix/trunk/dependencymanager/compat/src/main/java/org/apache/felix/dependencymanager: DependencyActivatorBase.java impl/ServiceImpl.java Date: Wed, 12 Jan 2011 21:10:42 -0000 To: commits@felix.apache.org From: pderop@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110112211042.4E48323889E9@eris.apache.org> Author: pderop Date: Wed Jan 12 21:10:41 2011 New Revision: 1058320 URL: http://svn.apache.org/viewvc?rev=1058320&view=rev Log: FELIX-2778 (DM compat layer does not cleanup left-over Service instances when bundle is stopped) Modified: felix/trunk/dependencymanager/compat/src/main/java/org/apache/felix/dependencymanager/DependencyActivatorBase.java felix/trunk/dependencymanager/compat/src/main/java/org/apache/felix/dependencymanager/impl/ServiceImpl.java Modified: felix/trunk/dependencymanager/compat/src/main/java/org/apache/felix/dependencymanager/DependencyActivatorBase.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/compat/src/main/java/org/apache/felix/dependencymanager/DependencyActivatorBase.java?rev=1058320&r1=1058319&r2=1058320&view=diff ============================================================================== --- felix/trunk/dependencymanager/compat/src/main/java/org/apache/felix/dependencymanager/DependencyActivatorBase.java (original) +++ felix/trunk/dependencymanager/compat/src/main/java/org/apache/felix/dependencymanager/DependencyActivatorBase.java Wed Jan 12 21:10:41 2011 @@ -20,6 +20,7 @@ package org.apache.felix.dependencymanag import java.util.List; +import org.apache.felix.dependencymanager.impl.ServiceImpl; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; @@ -82,6 +83,7 @@ public abstract class DependencyActivato */ public void stop(BundleContext context) throws Exception { destroy(m_context, m_manager); + cleanup(m_manager); m_manager = null; m_context = null; } @@ -112,4 +114,22 @@ public abstract class DependencyActivato public ConfigurationDependency createConfigurationDependency() { return new org.apache.felix.dependencymanager.impl.ConfigurationDependencyImpl(m_manager); } + + /** + * Cleans up all components and their dependencies. + * + * @param manager the dependency manager + */ + private void cleanup(DependencyManager manager) { + List services = manager.getServices(); + for (int i = services.size() - 1; i >= 0; i--) { + Service service = (Service) services.get(i); + manager.remove(service); + // remove any state listeners that are still registered + if (service instanceof ServiceImpl) { + ServiceImpl si = (ServiceImpl) service; + si.removeStateListeners(); + } + } + } } Modified: felix/trunk/dependencymanager/compat/src/main/java/org/apache/felix/dependencymanager/impl/ServiceImpl.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/compat/src/main/java/org/apache/felix/dependencymanager/impl/ServiceImpl.java?rev=1058320&r1=1058319&r2=1058320&view=diff ============================================================================== --- felix/trunk/dependencymanager/compat/src/main/java/org/apache/felix/dependencymanager/impl/ServiceImpl.java (original) +++ felix/trunk/dependencymanager/compat/src/main/java/org/apache/felix/dependencymanager/impl/ServiceImpl.java Wed Jan 12 21:10:41 2011 @@ -21,6 +21,7 @@ package org.apache.felix.dependencymanag import java.util.ArrayList; import java.util.Dictionary; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; @@ -134,6 +135,21 @@ public class ServiceImpl implements Serv m_delegate.removeStateListener(wrappedListener); } } + + public void removeStateListeners() + { + synchronized (m_stateListeners) + { + Iterator it = m_stateListeners.values().iterator(); + while (it.hasNext()) + { + org.apache.felix.dm.ComponentStateListener wrappedListener = + (org.apache.felix.dm.ComponentStateListener) it.next(); + m_delegate.removeStateListener(wrappedListener); + } + m_stateListeners.clear(); + } + } public List getDependencies() {