diff --git a/jetty-bom/pom.xml b/jetty-bom/pom.xml
index 50e3f41f506..3d3a4c0f793 100644
--- a/jetty-bom/pom.xml
+++ b/jetty-bom/pom.xml
@@ -116,6 +116,26 @@
jetty-alpn-java-server
10.0.0-SNAPSHOT
+
+ org.eclipse.jetty
+ jetty-alpn-openjdk8-client
+ 9.4.8-SNAPSHOT
+
+
+ org.eclipse.jetty
+ jetty-alpn-openjdk8-server
+ 9.4.8-SNAPSHOT
+
+
+ org.eclipse.jetty
+ jetty-alpn-conscrypt-client
+ 9.4.8-SNAPSHOT
+
+
+ org.eclipse.jetty
+ jetty-alpn-conscrypt-server
+ 9.4.8-SNAPSHOT
+
org.eclipse.jetty
jetty-alpn-server
diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHolder.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHolder.java
index bf17dbffdf7..3c0ce02fdab 100644
--- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHolder.java
+++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHolder.java
@@ -81,11 +81,11 @@ public class ServletHolder extends Holder implements UserIdentity.Scope
private ServletRegistration.Dynamic _registration;
private JspContainer _jspContainer;
- private transient Servlet _servlet;
- private transient Config _config;
- private transient long _unavailable;
- private transient boolean _enabled = true;
- private transient UnavailableException _unavailableEx;
+ private Servlet _servlet;
+ private long _unavailable;
+ private Config _config;
+ private boolean _enabled = true;
+ private UnavailableException _unavailableEx;
public static final String APACHE_SENTINEL_CLASS = "org.apache.tomcat.InstanceManager";
@@ -528,7 +528,7 @@ public class ServletHolder extends Holder implements UserIdentity.Scope
*/
public boolean isAvailable()
{
- if (isStarted()&& _unavailable==0)
+ if (isStarted() && _unavailable==0)
return true;
try
{
@@ -539,7 +539,7 @@ public class ServletHolder extends Holder implements UserIdentity.Scope
LOG.ignore(e);
}
- return isStarted()&& _unavailable==0;
+ return isStarted() && _unavailable==0;
}
/* ------------------------------------------------------------ */
@@ -773,20 +773,30 @@ public class ServletHolder extends Holder implements UserIdentity.Scope
baseRequest.setAttribute(Request.__MULTIPART_CONFIG_ELEMENT, mpce);
}
- public synchronized Servlet ensureInstance()
+ public Servlet ensureInstance()
throws ServletException, UnavailableException
{
- if (_class==null)
- throw new UnavailableException("Servlet Not Initialized");
- Servlet servlet=_servlet;
if (!isStarted())
throw new UnavailableException("Servlet not initialized", -1);
- if (_unavailable!=0 || (!_initOnStartup && servlet==null))
- servlet=getServlet();
- if (servlet==null)
- throw new UnavailableException("Could not instantiate "+_class);
- return servlet;
+ Servlet servlet=_servlet;
+ if (servlet!=null && _unavailable==0)
+ return servlet;
+
+ synchronized(this)
+ {
+ servlet=_servlet;
+ if (servlet!=null)
+ return servlet;
+ if (_class == null)
+ throw new UnavailableException("Servlet Not Initialized");
+ if (_unavailable != 0 || (!_initOnStartup && servlet == null))
+ servlet = getServlet();
+ if (servlet == null)
+ throw new UnavailableException("Could not instantiate " + _class);
+
+ return servlet;
+ }
}
/* ------------------------------------------------------------ */