From d883de7f9a13f14ca68727e6548b9e89535f7614 Mon Sep 17 00:00:00 2001
From: quangz <quangz@bluewisdom.com.cn>
Date: 星期六, 02 四月 2022 08:06:30 +0800
Subject: [PATCH] 修复ConcurrentModificationException

---
 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java |   19 ++++++++++++-------
 1 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java
index 3505225..f7551c2 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson.JSONObject;
 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
 
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
@@ -39,12 +40,8 @@
     private Map<HookType, Map<JSONObject, ZLMHttpHookSubscribe.Event>> allSubscribes = new ConcurrentHashMap<>();
 
     public void addSubscribe(HookType type, JSONObject hookResponse, ZLMHttpHookSubscribe.Event event) {
-        Map<JSONObject, Event> eventMap = allSubscribes.get(type);
-        if (eventMap == null) {
-            eventMap = new HashMap<JSONObject, Event>();
-            allSubscribes.put(type,eventMap);
-        }
-        eventMap.put(hookResponse, event);
+        allSubscribes.computeIfAbsent(type, k -> new ConcurrentHashMap<>())
+                .put(hookResponse, event);
     }
 
     public ZLMHttpHookSubscribe.Event getSubscribe(HookType type, JSONObject hookResponse) {
@@ -81,7 +78,8 @@
 
         Set<Map.Entry<JSONObject, Event>> entries = eventMap.entrySet();
         if (entries.size() > 0) {
-            for (Map.Entry<JSONObject, Event> entry : entries) {
+            List<Map.Entry<JSONObject, ZLMHttpHookSubscribe.Event>> entriesToRemove = new ArrayList<>();
+            for (Map.Entry<JSONObject, ZLMHttpHookSubscribe.Event> entry : entries) {
                 JSONObject key = entry.getKey();
                 Boolean result = null;
                 for (String s : key.keySet()) {
@@ -93,9 +91,16 @@
                     }
                 }
                 if (null != result && result){
+                    entriesToRemove.add(entry);
+                }
+            }
+
+            if (!CollectionUtils.isEmpty(entriesToRemove)) {
+                for (Map.Entry<JSONObject, ZLMHttpHookSubscribe.Event> entry : entriesToRemove) {
                     entries.remove(entry);
                 }
             }
+
         }
     }
 

--
Gitblit v1.8.0