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) {}