From cc232034fe37c139bc56f0b561890cd2a4935bf5 Mon Sep 17 00:00:00 2001 From: bibi samina Date: Mon, 6 Jul 2026 12:46:57 +0530 Subject: [PATCH 1/2] Make source map cache in StackTraceDeobfuscator thread-safe --- .../src/com/google/gwt/core/server/StackTraceDeobfuscator.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/user/src/com/google/gwt/core/server/StackTraceDeobfuscator.java b/user/src/com/google/gwt/core/server/StackTraceDeobfuscator.java index b2ba404fd0..7db6fa7a3f 100644 --- a/user/src/com/google/gwt/core/server/StackTraceDeobfuscator.java +++ b/user/src/com/google/gwt/core/server/StackTraceDeobfuscator.java @@ -154,7 +154,8 @@ Map getAll(String strongName, Set symbols) { private static final int LINE_NUMBER_UNKNOWN = -1; private static final String SYMBOL_DATA_UNKNOWN = ""; - private final Map sourceMaps = new HashMap(); + private final Map sourceMaps = + new ConcurrentHashMap(); private final SymbolCache symbolCache = new SymbolCache(); private boolean lazyLoad = false; From 9c557c51eda74e5b7004918d14eb85c78bcffe88 Mon Sep 17 00:00:00 2001 From: bibi samina Date: Thu, 9 Jul 2026 10:44:22 +0530 Subject: [PATCH 2/2] Load source maps via computeIfAbsent to avoid duplicate work --- .../gwt/core/server/StackTraceDeobfuscator.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/user/src/com/google/gwt/core/server/StackTraceDeobfuscator.java b/user/src/com/google/gwt/core/server/StackTraceDeobfuscator.java index 7db6fa7a3f..4e1b9a5660 100644 --- a/user/src/com/google/gwt/core/server/StackTraceDeobfuscator.java +++ b/user/src/com/google/gwt/core/server/StackTraceDeobfuscator.java @@ -154,8 +154,7 @@ Map getAll(String strongName, Set symbols) { private static final int LINE_NUMBER_UNKNOWN = -1; private static final String SYMBOL_DATA_UNKNOWN = ""; - private final Map sourceMaps = - new ConcurrentHashMap(); + private final Map sourceMaps = new ConcurrentHashMap<>(); private final SymbolCache symbolCache = new SymbolCache(); private boolean lazyLoad = false; @@ -377,17 +376,18 @@ private static boolean isValidStrongName(String strongName) { } private SourceMapping loadSourceMap(String permutationStrongName, int fragmentId) { - SourceMapping toReturn = sourceMaps.get(permutationStrongName + fragmentId); - if (toReturn == null && isValidStrongName(permutationStrongName)) { + if (!isValidStrongName(permutationStrongName)) { + return null; + } + return sourceMaps.computeIfAbsent(permutationStrongName + fragmentId, key -> { try { String sourceMapString = loadStreamAsString( getSourceMapInputStream(permutationStrongName, fragmentId)); - toReturn = SourceMapConsumerFactory.parse(sourceMapString); - sourceMaps.put(permutationStrongName + fragmentId, toReturn); + return SourceMapConsumerFactory.parse(sourceMapString); } catch (Exception e) { + return null; } - } - return toReturn; + }); } private String loadStreamAsString(InputStream stream) {