Skip to content

Commit

Permalink
ClassLoader synchronization removed
Browse files Browse the repository at this point in the history
locking on classloader fails, related issue #39
  • Loading branch information
skybber committed Dec 8, 2016
1 parent 6d7f75d commit fd1f2dd
Showing 1 changed file with 17 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -233,24 +233,24 @@ protected void ensureClassLoaderInitialized(final ClassLoader classLoader, final
PluginManager.getInstance().getScheduler().scheduleCommand(new Command() {
@Override
public void executeCommand() {
//
// Synchronize class loader to avoid DEADLOCKs on PluginManager.INSTANCE.
//
// Explanation:
// There are 2 possible places from which the PluginManager.getInstance().initClassLoader() can be called:
// 1. sun.instrument.TransformerManager.transform ->
// org.hotswap.agent.util.HotswapTransformer.transform ->
// PluginClassFileTransformer.transform() ->
// PluginManager.initClassLoader()
// In this case class loader is locked before call sun.instrument.TransformerManager.transform, subsequently
// an attempt to get PluginManager.INSTANCE lock is done in PluginManager.initClassLoader()
// 2. From this fallback. The lock is acquired in PluginManager.initClassLoader(), then an attempt to get ClassLoader
// lock is done when ClassLoaderDefineClassPatcher makes copy of HA'classes in the new classloader.
//
// conclusion : classloader must be locked before PluginManager.getInstance().initClassLoader is called.
synchronized (classLoader) {
// //
// // Synchronize class loader to avoid DEADLOCKs on PluginManager.INSTANCE.
// //
// // Explanation:
// // There are 2 possible places from which the PluginManager.getInstance().initClassLoader() can be called:
// // 1. sun.instrument.TransformerManager.transform ->
// // org.hotswap.agent.util.HotswapTransformer.transform ->
// // PluginClassFileTransformer.transform() ->
// // PluginManager.initClassLoader()
// // In this case class loader is locked before call sun.instrument.TransformerManager.transform, subsequently
// // an attempt to get PluginManager.INSTANCE lock is done in PluginManager.initClassLoader()
// // 2. From this fallback. The lock is acquired in PluginManager.initClassLoader(), then an attempt to get ClassLoader
// // lock is done when ClassLoaderDefineClassPatcher makes copy of HA'classes in the new classloader.
// //
// // conclusion : classloader must be locked before PluginManager.getInstance().initClassLoader is called.
// synchronized (classLoader) {
PluginManager.getInstance().initClassLoader(classLoader, protectionDomain);
}
// }
//
//
//
Expand Down

0 comments on commit fd1f2dd

Please sign in to comment.