This is an automated email from the ASF dual-hosted git repository.
tjwatson pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/felix-dev.git
The following commit(s) were added to refs/heads/master by this push:
new 65c7d77 [FELIX-6501] Fixed issue with ConcurrentModificationException
new 6d19201 Merge pull request #128 from amitjoy/bugfix/FELIX-6501
65c7d77 is described below
commit 65c7d7704996b5c656447ec425c83093a15a52df
Author: Amit Kumar Mondal <[email protected]>
AuthorDate: Tue Feb 1 17:03:12 2022 +0100
[FELIX-6501] Fixed issue with ConcurrentModificationException
---
.../org/apache/felix/scr/impl/manager/ComponentContextImpl.java | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git
a/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
b/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
index ff0616b..4ca1d85 100644
---
a/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
+++
b/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
@@ -19,11 +19,11 @@
package org.apache.felix.scr.impl.manager;
-import java.util.Collections;
+import java.util.Comparator;
import java.util.Dictionary;
import java.util.HashMap;
import java.util.Map;
-import java.util.TreeMap;
+import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -334,6 +334,9 @@ public class ComponentContextImpl<S> implements
ScrComponentContext {
private Map<RefPair<?, ?>, Object> createNewFieldHandlerMap()
{
- return Collections.synchronizedMap(new TreeMap<>((o1, o2) ->
o1.getRef().compareTo(o2.getRef())));
+ // it's not safe to use synchronized map to prevent concurrent
modification exceptions
+ // hence, concurrent collection is used as it provides higher
concurrency and scalability
+ // while preserving thread safety
+ return new
ConcurrentSkipListMap<>(Comparator.comparing(RefPair::getRef));
}
}