Skip to content

Commit 89de472

Browse files
tometzkyt3hG04T
authored andcommitted
fix: avoid O(n^2) algorithm in cleanUpGlobalClassValue jenkinsci#898
1 parent c6ff4ef commit 89de472

1 file changed

Lines changed: 12 additions & 8 deletions

File tree

src/main/java/org/jenkinsci/plugins/scriptsecurity/sandbox/groovy/SecureGroovyScript.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -249,19 +249,23 @@ private static void cleanUpGlobalClassValue(@NonNull ClassLoader loader) throws
249249
toRemove.add((Class) klazzF.get(value));
250250
}
251251
}
252-
Iterator<Class<?>> it = toRemove.iterator();
253-
while (it.hasNext()) {
254-
Class<?> klazz = it.next();
252+
boolean isLogLevelFinestLoggable = LOGGER.isLoggable(Level.FINEST);
253+
if (isLogLevelFinestLoggable) {
254+
LOGGER.log(Level.FINE, "The log level FINEST is loggable, cleanUpGlobalClassValue will be slow, toRemove.size()={0}", toRemove.size());
255+
}
256+
List<Class<?>> toRemoveReally = new ArrayList<>();
257+
for (Class<?> klazz : toRemove) {
255258
ClassLoader encounteredLoader = klazz.getClassLoader();
256259
if (encounteredLoader != loader) {
257-
it.remove();
258-
if (LOGGER.isLoggable(Level.FINEST)) {
259-
LOGGER.log(Level.FINEST, "ignoring {0} with loader {1}", new Object[] {klazz, /* do not hold from LogRecord */String.valueOf(encounteredLoader)});
260+
if (isLogLevelFinestLoggable) {
261+
LOGGER.log(Level.FINEST, "ignoring {0} with loader {1}", new Object[]{klazz, /* do not hold from LogRecord */String.valueOf(encounteredLoader)});
260262
}
263+
} else {
264+
toRemoveReally.add(klazz);
261265
}
262266
}
263-
LOGGER.log(Level.FINE, "cleaning up {0} associated with {1}", new Object[] {toRemove.toString(), loader.toString()});
264-
for (Class<?> klazz : toRemove) {
267+
LOGGER.log(Level.FINE, "cleaning up {0} associated with {1}", new Object[] {toRemoveReally.toString(), loader.toString()});
268+
for (Class<?> klazz : toRemoveReally) {
265269
removeM.invoke(map, klazz);
266270
}
267271
}

0 commit comments

Comments
 (0)