tdf#145527 Revert "Related tdf#116767: Call URLClassLoader.close"
This reverts commit 418533f0af. Turned out that
closing the given URLClassLoader once the script's main class has been loaded
prevents the script from loading further classes located next to that main
class. So abandon the Coverity suggestion that such class loaders should be
closed promptly to avoid resource leaks.
Change-Id: I1bcf83117836cfe317eac9850d413f2c3767bd8e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135158
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
This commit is contained in:
@@ -33,7 +33,7 @@ public class ClassLoaderFactory {
|
||||
|
||||
private ClassLoaderFactory() {}
|
||||
|
||||
public static URLClassLoader getURLClassLoader(ScriptMetaData scriptData) {
|
||||
public static ClassLoader getURLClassLoader(ScriptMetaData scriptData) {
|
||||
ClassLoader parent = scriptData.getClass().getClassLoader();
|
||||
URL[] classPath = scriptData.getClassPath();
|
||||
LogUtils.DEBUG("Classpath has length " + classPath.length);
|
||||
@@ -45,7 +45,7 @@ public class ClassLoaderFactory {
|
||||
return getURLClassLoader(parent, classPath);
|
||||
}
|
||||
|
||||
public static URLClassLoader getURLClassLoader(final ClassLoader parent,
|
||||
public static ClassLoader getURLClassLoader(final ClassLoader parent,
|
||||
final URL[] classpath) {
|
||||
return AccessController.doPrivileged(
|
||||
new PrivilegedAction<URLClassLoader>() {
|
||||
|
||||
+42
-51
@@ -45,8 +45,6 @@ import com.sun.star.uno.Any;
|
||||
import com.sun.star.uno.Type;
|
||||
import com.sun.star.uno.XComponentContext;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URLClassLoader;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class ScriptProviderForJava {
|
||||
@@ -184,63 +182,56 @@ class ScriptImpl implements XScript {
|
||||
ScriptDescriptor scriptDesc =
|
||||
new ScriptDescriptor(metaData.getLanguageName());
|
||||
|
||||
Object[] invocationArgs = null;
|
||||
ScriptProxy script = null;
|
||||
|
||||
LogUtils.DEBUG("Classloader starting...");
|
||||
|
||||
try (URLClassLoader scriptLoader = ClassLoaderFactory.getURLClassLoader(metaData)) {
|
||||
LogUtils.DEBUG("Classloader finished...");
|
||||
ClassLoader scriptLoader =
|
||||
ClassLoaderFactory.getURLClassLoader(metaData);
|
||||
|
||||
ArrayList<Object> invocationArgList = new ArrayList<Object>();
|
||||
LogUtils.DEBUG("Classloader finished...");
|
||||
|
||||
LogUtils.DEBUG("Parameter Mapping...");
|
||||
ArrayList<Object> invocationArgList = new ArrayList<Object>();
|
||||
Object[] invocationArgs = null;
|
||||
|
||||
// Setup Context Object
|
||||
XScriptContext xSc =
|
||||
ScriptContext.createContext(m_xModel, m_xInvocContext,
|
||||
m_xContext, m_xMultiComponentFactory);
|
||||
LogUtils.DEBUG("Parameter Mapping...");
|
||||
|
||||
scriptDesc.addArgumentType(XScriptContext.class);
|
||||
invocationArgList.add(xSc);
|
||||
// Setup Context Object
|
||||
XScriptContext xSc =
|
||||
ScriptContext.createContext(m_xModel, m_xInvocContext,
|
||||
m_xContext, m_xMultiComponentFactory);
|
||||
|
||||
for (int i = 0; i < params.length; i++) {
|
||||
scriptDesc.addArgumentType(params[ i ].getClass());
|
||||
invocationArgList.add(params[ i ]);
|
||||
}
|
||||
scriptDesc.addArgumentType(XScriptContext.class);
|
||||
invocationArgList.add(xSc);
|
||||
|
||||
if (!invocationArgList.isEmpty()) {
|
||||
invocationArgs = invocationArgList.toArray();
|
||||
}
|
||||
for (int i = 0; i < params.length; i++) {
|
||||
scriptDesc.addArgumentType(params[ i ].getClass());
|
||||
invocationArgList.add(params[ i ]);
|
||||
}
|
||||
|
||||
LogUtils.DEBUG("ScriptProxy starting... ");
|
||||
if (!invocationArgList.isEmpty()) {
|
||||
invocationArgs = invocationArgList.toArray();
|
||||
}
|
||||
|
||||
LogUtils.DEBUG("ScriptProxy starting... ");
|
||||
ScriptProxy script = null;
|
||||
|
||||
try {
|
||||
|
||||
String className = metaData.getLanguageName().substring(0,
|
||||
metaData.getLanguageName().lastIndexOf('.'));
|
||||
|
||||
LogUtils.DEBUG("About to load Class " + className + " starting... ");
|
||||
|
||||
long start = new java.util.Date().getTime();
|
||||
Class<?> c = scriptLoader.loadClass(className);
|
||||
long end = new java.util.Date().getTime();
|
||||
|
||||
LogUtils.DEBUG("loadClass took: " + (end - start) + "milliseconds");
|
||||
|
||||
try {
|
||||
|
||||
String className = metaData.getLanguageName().substring(0,
|
||||
metaData.getLanguageName().lastIndexOf('.'));
|
||||
|
||||
LogUtils.DEBUG("About to load Class " + className + " starting... ");
|
||||
|
||||
long start = new java.util.Date().getTime();
|
||||
Class<?> c = scriptLoader.loadClass(className);
|
||||
long end = new java.util.Date().getTime();
|
||||
|
||||
LogUtils.DEBUG("loadClass took: " + (end - start) + "milliseconds");
|
||||
|
||||
try {
|
||||
LogUtils.DEBUG("class loaded ... ");
|
||||
script = m_resolutionPolicy.getProxy(scriptDesc, c);
|
||||
LogUtils.DEBUG("script resolved ... ");
|
||||
} catch (NoSuchMethodException e) {
|
||||
// Framework error
|
||||
ScriptFrameworkErrorException e2 = new ScriptFrameworkErrorException(
|
||||
e.toString(), null, metaData.getLanguageName(),
|
||||
metaData.getLanguage(), ScriptFrameworkErrorType.NO_SUCH_SCRIPT);
|
||||
e2.initCause(e);
|
||||
throw e2;
|
||||
}
|
||||
} catch (ClassNotFoundException e) {
|
||||
LogUtils.DEBUG("class loaded ... ");
|
||||
script = m_resolutionPolicy.getProxy(scriptDesc, c);
|
||||
LogUtils.DEBUG("script resolved ... ");
|
||||
} catch (NoSuchMethodException e) {
|
||||
// Framework error
|
||||
ScriptFrameworkErrorException e2 = new ScriptFrameworkErrorException(
|
||||
e.toString(), null, metaData.getLanguageName(),
|
||||
@@ -248,11 +239,11 @@ class ScriptImpl implements XScript {
|
||||
e2.initCause(e);
|
||||
throw e2;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
} catch (ClassNotFoundException e) {
|
||||
// Framework error
|
||||
ScriptFrameworkErrorException e2 = new ScriptFrameworkErrorException(
|
||||
e.toString(), null, metaData.getLanguageName(), metaData.getLanguage(),
|
||||
ScriptFrameworkErrorType.NO_SUCH_SCRIPT);
|
||||
e.toString(), null, metaData.getLanguageName(),
|
||||
metaData.getLanguage(), ScriptFrameworkErrorType.NO_SUCH_SCRIPT);
|
||||
e2.initCause(e);
|
||||
throw e2;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user