Author: gnodet
Date: Wed Nov 20 09:54:45 2013
New Revision: 1543745
URL: http://svn.apache.org/r1543745
Log:
[FELIX-4313] Bad synchronization in scr where a lock is held while ungetting a
service
Modified:
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
Modified:
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
URL:
http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java?rev=1543745&r1=1543744&r2=1543745&view=diff
==============================================================================
---
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
(original)
+++
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
Wed Nov 20 09:54:45 2013
@@ -983,15 +983,17 @@ public class DependencyManager<S, T> imp
public void close()
{
+ RefPair<T> ref;
synchronized ( getTracker().tracked() )
{
- if ( refPair != null )
- {
- ungetService( refPair );
- }
+ ref = refPair;
refPair = null;
- getTracker().deactivate();
}
+ if ( ref != null )
+ {
+ ungetService( ref );
+ }
+ getTracker().deactivate();
}
public Collection<RefPair<T>> getRefs( AtomicInteger trackingCount )