You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pd...@apache.org on 2016/11/13 22:22:03 UTC

svn commit: r1769555 - /felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ServiceEventImpl.java

Author: pderop
Date: Sun Nov 13 22:22:03 2016
New Revision: 1769555

URL: http://svn.apache.org/viewvc?rev=1769555&view=rev
Log:
FELIX-5411: Ensure we don't unget the service reference twice.

Modified:
    felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ServiceEventImpl.java

Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ServiceEventImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ServiceEventImpl.java?rev=1769555&r1=1769554&r2=1769555&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ServiceEventImpl.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ServiceEventImpl.java Sun Nov 13 22:22:03 2016
@@ -19,6 +19,7 @@
 package org.apache.felix.dm.impl;
 
 import java.util.Dictionary;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.felix.dm.context.Event;
 import org.osgi.framework.Bundle;
@@ -45,6 +46,11 @@ public class ServiceEventImpl extends Ev
      */
 	private final Bundle m_bundle;
 	
+	/**
+	 * Protects in case close is called twice.
+	 */
+	private final AtomicBoolean m_closed = new AtomicBoolean(false);
+	
 	public ServiceEventImpl(ServiceReference reference, Object service) {
 	    this(null, null, reference, service);
 	}
@@ -108,7 +114,7 @@ public class ServiceEventImpl extends Ev
 
     @Override
     public void close() {
-        if (m_bundleContext != null) {
+        if (m_bundleContext != null && m_closed.compareAndSet(false, true)) {
             try {
             	m_bundleContext.ungetService(m_reference);
             } catch (IllegalStateException e) {}