diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-04-09 18:49:14 -0700 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-04-09 20:20:43 -0700 |
commit | 8bd438bf84c1b221bcc122b3abe5d4ec37495071 (patch) | |
tree | eca1801186e80aaeeeaead3328cae64c39d18c9e /core | |
parent | 49534fefea1c3d9827350d116d63aa8f354b01a9 (diff) | |
download | mill-8bd438bf84c1b221bcc122b3abe5d4ec37495071.tar.gz mill-8bd438bf84c1b221bcc122b3abe5d4ec37495071.tar.bz2 mill-8bd438bf84c1b221bcc122b3abe5d4ec37495071.zip |
share com.sun.jna.platform.win32.Kernel32 class between all classloaders, because initializing it more than once within a single process causes crashes
Diffstat (limited to 'core')
-rw-r--r-- | core/src/mill/util/ClassLoader.scala | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/core/src/mill/util/ClassLoader.scala b/core/src/mill/util/ClassLoader.scala index 9678989e..c0421a7b 100644 --- a/core/src/mill/util/ClassLoader.scala +++ b/core/src/mill/util/ClassLoader.scala @@ -12,7 +12,12 @@ object ClassLoader { new URLClassLoader( makeUrls(urls).toArray, refinePlatformParent(parent) - ) + ) { + override def findClass(name: String): Class[_] = { + if (name.startsWith("com.sun.jna")) getClass.getClassLoader.loadClass(name) + else super.findClass(name) + } + } } def create(urls: Seq[URL], @@ -24,7 +29,8 @@ object ClassLoader { refinePlatformParent(parent) ) { override def findClass(name: String): Class[_] = { - customFindClass(name).getOrElse(super.findClass(name)) + if (name.startsWith("com.sun.jna")) getClass.getClassLoader.loadClass(name) + else customFindClass(name).getOrElse(super.findClass(name)) } } } |