|
16 | 16 | */
|
17 | 17 | package org.apache.logging.log4j;
|
18 | 18 |
|
| 19 | +import java.util.ArrayList; |
19 | 20 | import java.util.HashMap;
|
20 |
| -import java.util.Iterator; |
21 | 21 | import java.util.List;
|
22 | 22 | import java.util.Map;
|
23 | 23 |
|
@@ -203,18 +203,22 @@ public void close() {
|
203 | 203 | }
|
204 | 204 |
|
205 | 205 | private void closeMap() {
|
206 |
| - for (final Iterator<Map.Entry<String, String>> it = |
207 |
| - originalValues.entrySet().iterator(); |
208 |
| - it.hasNext(); ) { |
209 |
| - final Map.Entry<String, String> entry = it.next(); |
| 206 | + final Map<String, String> valuesToReplace = new HashMap<>(originalValues.size()); |
| 207 | + final List<String> keysToRemove = new ArrayList<>(originalValues.size()); |
| 208 | + for (final Map.Entry<String, String> entry : originalValues.entrySet()) { |
210 | 209 | final String key = entry.getKey();
|
211 | 210 | final String originalValue = entry.getValue();
|
212 | 211 | if (null == originalValue) {
|
213 |
| - ThreadContext.remove(key); |
| 212 | + keysToRemove.add(key); |
214 | 213 | } else {
|
215 |
| - ThreadContext.put(key, originalValue); |
| 214 | + valuesToReplace.put(key, originalValue); |
216 | 215 | }
|
217 |
| - it.remove(); |
| 216 | + } |
| 217 | + if (!valuesToReplace.isEmpty()) { |
| 218 | + ThreadContext.putAll(valuesToReplace); |
| 219 | + } |
| 220 | + if (!keysToRemove.isEmpty()) { |
| 221 | + ThreadContext.removeAll(keysToRemove); |
218 | 222 | }
|
219 | 223 | }
|
220 | 224 |
|
|
0 commit comments