From 146858505f14bff3b8384f8f369ad677436f2903 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 23 Feb 2018 15:04:57 +0000 Subject: [PATCH] Synchronize on class loading lock in RestartClassLoader Closes gh-12171 --- .../classloader/RestartClassLoader.java | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/restart/classloader/RestartClassLoader.java b/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/restart/classloader/RestartClassLoader.java index ac39e2a5fb..04ba9ad715 100644 --- a/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/restart/classloader/RestartClassLoader.java +++ b/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/restart/classloader/RestartClassLoader.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2015 the original author or authors. + * Copyright 2012-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -142,19 +142,21 @@ public class RestartClassLoader extends URLClassLoader implements SmartClassLoad if (file != null && file.getKind() == Kind.DELETED) { throw new ClassNotFoundException(name); } - Class loadedClass = findLoadedClass(name); - if (loadedClass == null) { - try { - loadedClass = findClass(name); + synchronized (getClassLoadingLock(name)) { + Class loadedClass = findLoadedClass(name); + if (loadedClass == null) { + try { + loadedClass = findClass(name); + } + catch (ClassNotFoundException ex) { + loadedClass = getParent().loadClass(name); + } } - catch (ClassNotFoundException ex) { - loadedClass = getParent().loadClass(name); + if (resolve) { + resolveClass(loadedClass); } + return loadedClass; } - if (resolve) { - resolveClass(loadedClass); - } - return loadedClass; } @Override