From 6b53a4fac483c092e498acb2b5b79ac1bc622a3a Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 16 Sep 2018 11:29:03 +0000 Subject: [PATCH] Build: Fix hang with Tomcat 8.5.33+ (ticket #2307) --- apps/i2ptunnel/java/build.xml | 4 +-- .../java/src/net/i2p/servlet/util/JspC.java | 34 +++++++++++++++++++ apps/routerconsole/java/build.xml | 30 ++++++++++++++-- apps/susidns/src/build.xml | 4 ++- 4 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 apps/jetty/java/src/net/i2p/servlet/util/JspC.java diff --git a/apps/i2ptunnel/java/build.xml b/apps/i2ptunnel/java/build.xml index d3a9a5d8a..04e790839 100644 --- a/apps/i2ptunnel/java/build.xml +++ b/apps/i2ptunnel/java/build.xml @@ -305,8 +305,8 @@ - - + + diff --git a/apps/jetty/java/src/net/i2p/servlet/util/JspC.java b/apps/jetty/java/src/net/i2p/servlet/util/JspC.java new file mode 100644 index 000000000..02b7040b3 --- /dev/null +++ b/apps/jetty/java/src/net/i2p/servlet/util/JspC.java @@ -0,0 +1,34 @@ +package net.i2p.servlet.util; + +import java.lang.reflect.Method; + +/** + * Simply call org.apache.jasper.JspC, then exit. + * + * As of Tomcat 8.5.33, forking their JspC won't complete, + * because the JspC compilation is now threaded and the thread pool workers aren't daemons. + * May be fixed in a future release, maybe not, but we don't know what version distros may have. + * + * https://tomcat.apache.org/tomcat-8.5-doc/changelog.html + * https://bz.apache.org/bugzilla/show_bug.cgi?id=53492 + * + * We could set fork=false in build.xml, but then the paths are all wrong. + * Only for use in build scripts, obviously not a public API. + * See apps/routerconsole/java/build.xml for more information. + * + * @since 0.9.37 + */ +public class JspC { + public static void main(String args[]) { + try { + String cls = "org.apache.jasper.JspC"; + Class c = Class.forName(cls, true, ClassLoader.getSystemClassLoader()); + Method main = c.getMethod("main", String[].class); + main.invoke(null, (Object) args); + System.exit(0); + } catch (Exception e) { + e.printStackTrace(); + System.exit(1); + } + } +} diff --git a/apps/routerconsole/java/build.xml b/apps/routerconsole/java/build.xml index 1f68546bb..294023a98 100644 --- a/apps/routerconsole/java/build.xml +++ b/apps/routerconsole/java/build.xml @@ -353,7 +353,13 @@ - + - + + diff --git a/apps/susidns/src/build.xml b/apps/susidns/src/build.xml index ad07268eb..0eaac0d4d 100644 --- a/apps/susidns/src/build.xml +++ b/apps/susidns/src/build.xml @@ -30,6 +30,7 @@ + @@ -69,7 +70,8 @@ - + +