commit | 48e9027e031803f86495efec0b8f5d53df87dab5 | [log] [tgz] |
---|---|---|
author | Guillaume Nodet <gnodet@apache.org> | Wed Nov 20 09:54:45 2013 +0000 |
committer | Guillaume Nodet <gnodet@apache.org> | Wed Nov 20 09:54:45 2013 +0000 |
tree | a1e048b49578ca3373f9c55a1b2409ae99548153 | |
parent | bf19361366c41f0d94de0e92f834cad5e050f493 [diff] |
[FELIX-4313] Bad synchronization in scr where a lock is held while ungetting a service git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1543745 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java index 87f846c..4629fd3 100644 --- a/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java +++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
@@ -983,15 +983,17 @@ 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 )