This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/10.1.x by this push:
new 0064bc6933 Refactor to reduce native calls
0064bc6933 is described below
commit 0064bc69334bb40e5fae381b5b1b3506b73bb044
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Fri Feb 24 14:59:43 2023 +0000
Refactor to reduce native calls
Thread.currentThread() is a native call so ensure it is only used once
per method, caching the result in a local variable if it is used more
than once.
Note: some instances of caching aren't strictly necessary but are a
side-effect of the refactoring.
---
java/org/apache/catalina/ant/ValidatorTask.java | 7 +-
.../core/JreMemoryLeakPreventionListener.java | 7 +-
java/org/apache/catalina/core/StandardContext.java | 14 ++--
java/org/apache/catalina/core/StandardServer.java | 5 +-
.../catalina/ha/context/ReplicatedContext.java | 7 +-
.../apache/catalina/ha/session/DeltaManager.java | 7 +-
.../apache/catalina/ha/session/DeltaSession.java | 7 +-
java/org/apache/catalina/loader/WebappLoader.java | 7 +-
java/org/apache/catalina/realm/JAASRealm.java | 10 +--
java/org/apache/catalina/realm/JNDIRealm.java | 80 +++++++++++++---------
.../apache/catalina/servlets/DefaultServlet.java | 10 +--
.../tribes/membership/McastServiceImpl.java | 37 +++++-----
.../membership/StaticMembershipProvider.java | 14 ++--
.../membership/cloud/CloudMembershipProvider.java | 7 +-
.../catalina/valves/StuckThreadDetectionValve.java | 5 +-
java/org/apache/coyote/AsyncStateMachine.java | 13 ++--
java/org/apache/jasper/JspC.java | 9 +--
.../apache/jasper/compiler/ELFunctionMapper.java | 5 +-
.../apache/jasper/compiler/JspDocumentParser.java | 10 +--
.../apache/jasper/compiler/TagPluginManager.java | 13 ++--
java/org/apache/naming/ContextBindings.java | 10 +--
.../tomcat/util/descriptor/tld/TldParser.java | 11 +--
.../tomcat/util/security/PrivilegedGetTccl.java | 15 +++-
.../tomcat/util/security/PrivilegedSetTccl.java | 1 +
.../tomcat/util/threads/ThreadPoolExecutor.java | 6 +-
.../tomcat/websocket/AsyncChannelGroupUtil.java | 8 +--
.../tomcat/websocket/server/WsFrameServer.java | 14 ++--
.../TestWebappClassLoaderExecutorMemoryLeak.java | 11 ++-
.../catalina/startup/TestTomcatClassLoader.java | 7 +-
.../org/apache/juli/TestClassLoaderLogManager.java | 7 +-
30 files changed, 207 insertions(+), 157 deletions(-)
diff --git a/java/org/apache/catalina/ant/ValidatorTask.java
b/java/org/apache/catalina/ant/ValidatorTask.java
index fbe360dd0a..81d3997bc4 100644
--- a/java/org/apache/catalina/ant/ValidatorTask.java
+++ b/java/org/apache/catalina/ant/ValidatorTask.java
@@ -81,8 +81,9 @@ public class ValidatorTask extends BaseRedirectorHelperTask {
}
// Commons-logging likes having the context classloader set
- ClassLoader oldCL = Thread.currentThread().getContextClassLoader();
-
Thread.currentThread().setContextClassLoader(ValidatorTask.class.getClassLoader());
+ Thread currentThread = Thread.currentThread();
+ ClassLoader oldCL = currentThread.getContextClassLoader();
+
currentThread.setContextClassLoader(ValidatorTask.class.getClassLoader());
// Called through trusted manager interface. If running under a
// SecurityManager assume that untrusted applications may be deployed.
@@ -100,7 +101,7 @@ public class ValidatorTask extends BaseRedirectorHelperTask
{
handleErrorOutput("Validation failure: " + e);
}
} finally {
- Thread.currentThread().setContextClassLoader(oldCL);
+ currentThread.setContextClassLoader(oldCL);
closeRedirector();
}
diff --git a/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java b/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
index 5d87a8f5d4..df675f6b11 100644
--- a/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
+++ b/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
@@ -127,12 +127,13 @@ public class JreMemoryLeakPreventionListener implements
LifecycleListener {
DriverManager.getDrivers();
}
- ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ Thread currentThread = Thread.currentThread();
+ ClassLoader loader = currentThread.getContextClassLoader();
try {
// Use the system classloader as the victim for all this
// ClassLoader pinning we're about to do.
-
Thread.currentThread().setContextClassLoader(ClassLoader.getSystemClassLoader());
+
currentThread.setContextClassLoader(ClassLoader.getSystemClassLoader());
/*
* Several components end up calling:
sun.awt.AppContext.getAppContext()
@@ -183,7 +184,7 @@ public class JreMemoryLeakPreventionListener implements
LifecycleListener {
}
} finally {
- Thread.currentThread().setContextClassLoader(loader);
+ currentThread.setContextClassLoader(loader);
}
}
}
diff --git a/java/org/apache/catalina/core/StandardContext.java
b/java/org/apache/catalina/core/StandardContext.java
index c403647275..6803a35477 100644
--- a/java/org/apache/catalina/core/StandardContext.java
+++ b/java/org/apache/catalina/core/StandardContext.java
@@ -5468,12 +5468,13 @@ public class StandardContext extends ContainerBase
implements Context, Notificat
webApplicationClassLoader = loader.getClassLoader();
}
+ Thread currentThread = Thread.currentThread();
if (originalClassLoader == null) {
if (usePrivilegedAction) {
- PrivilegedAction<ClassLoader> pa = new PrivilegedGetTccl();
+ PrivilegedAction<ClassLoader> pa = new
PrivilegedGetTccl(currentThread);
originalClassLoader = AccessController.doPrivileged(pa);
} else {
- originalClassLoader =
Thread.currentThread().getContextClassLoader();
+ originalClassLoader = currentThread.getContextClassLoader();
}
}
@@ -5486,10 +5487,10 @@ public class StandardContext extends ContainerBase implements Context, Notificat
ThreadBindingListener threadBindingListener =
getThreadBindingListener();
if (usePrivilegedAction) {
- PrivilegedAction<Void> pa = new
PrivilegedSetTccl(webApplicationClassLoader);
+ PrivilegedAction<Void> pa = new PrivilegedSetTccl(currentThread,
webApplicationClassLoader);
AccessController.doPrivileged(pa);
} else {
-
Thread.currentThread().setContextClassLoader(webApplicationClassLoader);
+ currentThread.setContextClassLoader(webApplicationClassLoader);
}
if (threadBindingListener != null) {
try {
@@ -5519,11 +5520,12 @@ public class StandardContext extends ContainerBase
implements Context, Notificat
}
}
+ Thread currentThread = Thread.currentThread();
if (usePrivilegedAction) {
- PrivilegedAction<Void> pa = new
PrivilegedSetTccl(originalClassLoader);
+ PrivilegedAction<Void> pa = new PrivilegedSetTccl(currentThread,
originalClassLoader);
AccessController.doPrivileged(pa);
} else {
- Thread.currentThread().setContextClassLoader(originalClassLoader);
+ currentThread.setContextClassLoader(originalClassLoader);
}
}
diff --git a/java/org/apache/catalina/core/StandardServer.java b/java/org/apache/catalina/core/StandardServer.java
index a49edefac3..9c6f4b2173 100644
--- a/java/org/apache/catalina/core/StandardServer.java
+++ b/java/org/apache/catalina/core/StandardServer.java
@@ -554,9 +554,10 @@ public final class StandardServer extends
LifecycleMBeanBase implements Server {
// undocumented yet - for embedding apps that are around, alive.
return;
}
+ Thread currentThread = Thread.currentThread();
if (getPortWithOffset() == -1) {
try {
- awaitThread = Thread.currentThread();
+ awaitThread = currentThread;
while (!stopAwait) {
try {
Thread.sleep(10000);
@@ -580,7 +581,7 @@ public final class StandardServer extends
LifecycleMBeanBase implements Server {
}
try {
- awaitThread = Thread.currentThread();
+ awaitThread = currentThread;
// Loop waiting for a connection and a valid command
while (!stopAwait) {
diff --git a/java/org/apache/catalina/ha/context/ReplicatedContext.java
b/java/org/apache/catalina/ha/context/ReplicatedContext.java
index 91c311708a..f916b32630 100644
--- a/java/org/apache/catalina/ha/context/ReplicatedContext.java
+++ b/java/org/apache/catalina/ha/context/ReplicatedContext.java
@@ -106,13 +106,14 @@ public class ReplicatedContext extends StandardContext
implements MapOwner {
if (loader != null) {
classLoader = loader.getClassLoader();
}
+ Thread currentThread = Thread.currentThread();
if ( classLoader == null ) {
- classLoader = Thread.currentThread().getContextClassLoader();
+ classLoader = currentThread.getContextClassLoader();
}
- if ( classLoader == Thread.currentThread().getContextClassLoader() ) {
+ if ( classLoader == currentThread.getContextClassLoader() ) {
return new ClassLoader[] {classLoader};
} else {
- return new ClassLoader[]
{classLoader,Thread.currentThread().getContextClassLoader()};
+ return new ClassLoader[]
{classLoader,currentThread.getContextClassLoader()};
}
}
diff --git a/java/org/apache/catalina/ha/session/DeltaManager.java b/java/org/apache/catalina/ha/session/DeltaManager.java
index 05b35782e5..ee41f8effe 100644
--- a/java/org/apache/catalina/ha/session/DeltaManager.java
+++ b/java/org/apache/catalina/ha/session/DeltaManager.java
@@ -1103,11 +1103,12 @@ public class DeltaManager extends ClusterManagerBase{
* requesting node
*/
protected void messageReceived(SessionMessage msg, Member sender) {
- ClassLoader contextLoader =
Thread.currentThread().getContextClassLoader();
+ Thread currentThread = Thread.currentThread();
+ ClassLoader contextLoader = currentThread.getContextClassLoader();
try {
ClassLoader[] loaders = getClassLoaders();
- Thread.currentThread().setContextClassLoader(loaders[0]);
+ currentThread.setContextClassLoader(loaders[0]);
if (log.isDebugEnabled()) {
log.debug(sm.getString("deltaManager.receiveMessage.eventType",
getName(), msg.getEventTypeString(), sender));
@@ -1148,7 +1149,7 @@ public class DeltaManager extends ClusterManagerBase{
} catch (Exception x) {
log.error(sm.getString("deltaManager.receiveMessage.error",getName()), x);
} finally {
- Thread.currentThread().setContextClassLoader(contextLoader);
+ currentThread.setContextClassLoader(contextLoader);
}
}
diff --git a/java/org/apache/catalina/ha/session/DeltaSession.java b/java/org/apache/catalina/ha/session/DeltaSession.java
index d3188c56a4..769556923d 100644
--- a/java/org/apache/catalina/ha/session/DeltaSession.java
+++ b/java/org/apache/catalina/ha/session/DeltaSession.java
@@ -197,16 +197,17 @@ public class DeltaSession extends StandardSession
implements Externalizable,Clus
public void applyDiff(byte[] diff, int offset, int length) throws
IOException, ClassNotFoundException {
lockInternal();
try (ObjectInputStream stream = ((ClusterManager)
getManager()).getReplicationStream(diff, offset, length)) {
- ClassLoader contextLoader =
Thread.currentThread().getContextClassLoader();
+ Thread currentThread = Thread.currentThread();
+ ClassLoader contextLoader = currentThread.getContextClassLoader();
try {
ClassLoader[] loaders = getClassLoaders();
if (loaders != null && loaders.length > 0) {
- Thread.currentThread().setContextClassLoader(loaders[0]);
+ currentThread.setContextClassLoader(loaders[0]);
}
getDeltaRequest().readExternal(stream);
getDeltaRequest().execute(this,
((ClusterManager)getManager()).isNotifyListenersOnReplication());
} finally {
- Thread.currentThread().setContextClassLoader(contextLoader);
+ currentThread.setContextClassLoader(contextLoader);
}
} finally {
unlockInternal();
diff --git a/java/org/apache/catalina/loader/WebappLoader.java
b/java/org/apache/catalina/loader/WebappLoader.java
index 76d87b00a4..d3193955ce 100644
--- a/java/org/apache/catalina/loader/WebappLoader.java
+++ b/java/org/apache/catalina/loader/WebappLoader.java
@@ -263,12 +263,13 @@ public class WebappLoader extends LifecycleMBeanBase
implements Loader {
Context context = getContext();
if (context != null) {
if (context.getReloadable() && modified()) {
- ClassLoader originalTccl =
Thread.currentThread().getContextClassLoader();
+ Thread currentThread = Thread.currentThread();
+ ClassLoader originalTccl =
currentThread.getContextClassLoader();
try {
-
Thread.currentThread().setContextClassLoader(WebappLoader.class.getClassLoader());
+
currentThread.setContextClassLoader(WebappLoader.class.getClassLoader());
context.reload();
} finally {
- Thread.currentThread().setContextClassLoader(originalTccl);
+ currentThread.setContextClassLoader(originalTccl);
}
}
}
diff --git a/java/org/apache/catalina/realm/JAASRealm.java
b/java/org/apache/catalina/realm/JAASRealm.java
index 4b6dbe3ee7..ae19308a18 100644
--- a/java/org/apache/catalina/realm/JAASRealm.java
+++ b/java/org/apache/catalina/realm/JAASRealm.java
@@ -375,10 +375,12 @@ public class JAASRealm extends RealmBase {
// What if the LoginModule is in the container class loader ?
ClassLoader ocl = null;
+ Thread currentThread = null;
if (!isUseContextClassLoader()) {
- ocl = Thread.currentThread().getContextClassLoader();
-
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+ currentThread = Thread.currentThread();
+ ocl = currentThread.getContextClassLoader();
+
currentThread.setContextClassLoader(this.getClass().getClassLoader());
}
try {
@@ -392,8 +394,8 @@ public class JAASRealm extends RealmBase {
invocationSuccess = false;
return null;
} finally {
- if (!isUseContextClassLoader()) {
- Thread.currentThread().setContextClassLoader(ocl);
+ if (currentThread != null) {
+ currentThread.setContextClassLoader(ocl);
}
}
diff --git a/java/org/apache/catalina/realm/JNDIRealm.java b/java/org/apache/catalina/realm/JNDIRealm.java
index 7fd80ede50..2f75f11619 100644
--- a/java/org/apache/catalina/realm/JNDIRealm.java
+++ b/java/org/apache/catalina/realm/JNDIRealm.java
@@ -1134,6 +1134,7 @@ public class JNDIRealm extends RealmBase {
public Principal authenticate(String username, String credentials) {
ClassLoader ocl = null;
+ Thread currentThread = null;
JNDIConnection connection = null;
Principal principal = null;
@@ -1143,8 +1144,9 @@ public class JNDIRealm extends RealmBase {
// running on a JVM that includes a fix for
// https://bugs.openjdk.java.net/browse/JDK-8273874
if (!isUseContextClassLoader()) {
- ocl = Thread.currentThread().getContextClassLoader();
-
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+ currentThread = Thread.currentThread();
+ ocl = currentThread.getContextClassLoader();
+
currentThread.setContextClassLoader(this.getClass().getClassLoader());
}
// Ensure that we have a directory context available
@@ -1206,8 +1208,8 @@ public class JNDIRealm extends RealmBase {
}
return null;
} finally {
- if (!isUseContextClassLoader()) {
- Thread.currentThread().setContextClassLoader(ocl);
+ if (currentThread != null) {
+ currentThread.setContextClassLoader(ocl);
}
}
}
@@ -1236,14 +1238,16 @@ public class JNDIRealm extends RealmBase {
}
ClassLoader ocl = null;
+ Thread currentThread= null;
try {
// https://bz.apache.org/bugzilla/show_bug.cgi?id=65553
// This can move back to open() once it is known that Tomcat must
be
// running on a JVM that includes a fix for
// https://bugs.openjdk.java.net/browse/JDK-8273874
if (!isUseContextClassLoader()) {
- ocl = Thread.currentThread().getContextClassLoader();
-
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+ currentThread = Thread.currentThread();
+ ocl = currentThread.getContextClassLoader();
+
currentThread.setContextClassLoader(this.getClass().getClassLoader());
}
if (userPatternArray != null) {
@@ -1294,8 +1298,8 @@ public class JNDIRealm extends RealmBase {
return new GenericPrincipal(username, roles);
}
} finally {
- if (!isUseContextClassLoader()) {
- Thread.currentThread().setContextClassLoader(ocl);
+ if (currentThread != null) {
+ currentThread.setContextClassLoader(ocl);
}
}
}
@@ -1309,15 +1313,17 @@ public class JNDIRealm extends RealmBase {
@Override
public Principal authenticate(String username) {
ClassLoader ocl = null;
+ Thread currentThread = null;
try {
if (!isUseContextClassLoader()) {
- ocl = Thread.currentThread().getContextClassLoader();
-
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+ currentThread = Thread.currentThread();
+ ocl = currentThread.getContextClassLoader();
+
currentThread.setContextClassLoader(this.getClass().getClassLoader());
}
return super.authenticate(username);
} finally {
- if (!isUseContextClassLoader()) {
- Thread.currentThread().setContextClassLoader(ocl);
+ if (currentThread != null) {
+ currentThread.setContextClassLoader(ocl);
}
}
}
@@ -1332,15 +1338,17 @@ public class JNDIRealm extends RealmBase {
public Principal authenticate(String username, String clientDigest,
String nonce, String nc, String cnonce,
String qop, String realm, String md5a2) {
ClassLoader ocl = null;
+ Thread currentThread = null;
try {
if (!isUseContextClassLoader()) {
- ocl = Thread.currentThread().getContextClassLoader();
-
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+ currentThread = Thread.currentThread();
+ ocl = currentThread.getContextClassLoader();
+
currentThread.setContextClassLoader(this.getClass().getClassLoader());
}
return super.authenticate(username, clientDigest, nonce, nc,
cnonce, qop, realm, md5a2);
} finally {
- if (!isUseContextClassLoader()) {
- Thread.currentThread().setContextClassLoader(ocl);
+ if (currentThread != null) {
+ currentThread.setContextClassLoader(ocl);
}
}
}
@@ -1354,15 +1362,17 @@ public class JNDIRealm extends RealmBase {
@Override
public Principal authenticate(X509Certificate[] certs) {
ClassLoader ocl = null;
+ Thread currentThread = null;
try {
if (!isUseContextClassLoader()) {
- ocl = Thread.currentThread().getContextClassLoader();
-
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+ currentThread = Thread.currentThread();
+ ocl = currentThread.getContextClassLoader();
+
currentThread.setContextClassLoader(this.getClass().getClassLoader());
}
return super.authenticate(certs);
} finally {
- if (!isUseContextClassLoader()) {
- Thread.currentThread().setContextClassLoader(ocl);
+ if (currentThread != null) {
+ currentThread.setContextClassLoader(ocl);
}
}
}
@@ -1376,15 +1386,17 @@ public class JNDIRealm extends RealmBase {
@Override
public Principal authenticate(GSSContext gssContext, boolean storeCred) {
ClassLoader ocl = null;
+ Thread currentThread = null;
try {
if (!isUseContextClassLoader()) {
- ocl = Thread.currentThread().getContextClassLoader();
-
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+ currentThread = Thread.currentThread();
+ ocl = currentThread.getContextClassLoader();
+
currentThread.setContextClassLoader(this.getClass().getClassLoader());
}
return super.authenticate(gssContext, storeCred);
} finally {
- if (!isUseContextClassLoader()) {
- Thread.currentThread().setContextClassLoader(ocl);
+ if (currentThread != null) {
+ currentThread.setContextClassLoader(ocl);
}
}
}
@@ -1398,15 +1410,17 @@ public class JNDIRealm extends RealmBase {
@Override
public Principal authenticate(GSSName gssName, GSSCredential
gssCredential) {
ClassLoader ocl = null;
+ Thread currentThread = null;
try {
if (!isUseContextClassLoader()) {
- ocl = Thread.currentThread().getContextClassLoader();
-
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+ currentThread = Thread.currentThread();
+ ocl = currentThread.getContextClassLoader();
+
currentThread.setContextClassLoader(this.getClass().getClassLoader());
}
return super.authenticate(gssName, gssCredential);
} finally {
- if (!isUseContextClassLoader()) {
- Thread.currentThread().setContextClassLoader(ocl);
+ if (currentThread != null) {
+ currentThread.setContextClassLoader(ocl);
}
}
}
@@ -2706,6 +2720,7 @@ public class JNDIRealm extends RealmBase {
// Check to see if the connection to the directory can be opened
ClassLoader ocl = null;
+ Thread currentThread = null;
JNDIConnection connection = null;
try {
// https://bz.apache.org/bugzilla/show_bug.cgi?id=65553
@@ -2713,8 +2728,9 @@ public class JNDIRealm extends RealmBase {
// running on a JVM that includes a fix for
// https://bugs.openjdk.java.net/browse/JDK-8273874
if (!isUseContextClassLoader()) {
- ocl = Thread.currentThread().getContextClassLoader();
-
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+ currentThread = Thread.currentThread();
+ ocl = currentThread.getContextClassLoader();
+
currentThread.setContextClassLoader(this.getClass().getClassLoader());
}
connection = get();
} catch (NamingException e) {
@@ -2725,8 +2741,8 @@ public class JNDIRealm extends RealmBase {
containerLog.error(sm.getString("jndiRealm.open"), e);
} finally {
release(connection);
- if (!isUseContextClassLoader()) {
- Thread.currentThread().setContextClassLoader(ocl);
+ if (currentThread != null) {
+ currentThread.setContextClassLoader(ocl);
}
}
diff --git a/java/org/apache/catalina/servlets/DefaultServlet.java b/java/org/apache/catalina/servlets/DefaultServlet.java
index dcb13dff17..8e9ad45ceb 100644
--- a/java/org/apache/catalina/servlets/DefaultServlet.java
+++ b/java/org/apache/catalina/servlets/DefaultServlet.java
@@ -1714,16 +1714,16 @@ public class DefaultServlet extends HttpServlet {
// Prevent possible memory leak. Ensure Transformer and
// TransformerFactory are not loaded from the web application.
ClassLoader original;
+ Thread currentThread = Thread.currentThread();
if (Globals.IS_SECURITY_ENABLED) {
- PrivilegedGetTccl pa = new PrivilegedGetTccl();
+ PrivilegedGetTccl pa = new PrivilegedGetTccl(currentThread);
original = AccessController.doPrivileged(pa);
} else {
original = Thread.currentThread().getContextClassLoader();
}
try {
if (Globals.IS_SECURITY_ENABLED) {
- PrivilegedSetTccl pa =
- new
PrivilegedSetTccl(DefaultServlet.class.getClassLoader());
+ PrivilegedSetTccl pa = new PrivilegedSetTccl(currentThread,
DefaultServlet.class.getClassLoader());
AccessController.doPrivileged(pa);
} else {
Thread.currentThread().setContextClassLoader(
@@ -1744,10 +1744,10 @@ public class DefaultServlet extends HttpServlet {
throw new
ServletException(sm.getString("defaultServlet.xslError"), e);
} finally {
if (Globals.IS_SECURITY_ENABLED) {
- PrivilegedSetTccl pa = new PrivilegedSetTccl(original);
+ PrivilegedSetTccl pa = new PrivilegedSetTccl(currentThread,
original);
AccessController.doPrivileged(pa);
} else {
- Thread.currentThread().setContextClassLoader(original);
+ currentThread.setContextClassLoader(original);
}
}
}
diff --git a/java/org/apache/catalina/tribes/membership/McastServiceImpl.java
b/java/org/apache/catalina/tribes/membership/McastServiceImpl.java
index c0d79c049e..9273bef1c6 100644
--- a/java/org/apache/catalina/tribes/membership/McastServiceImpl.java
+++ b/java/org/apache/catalina/tribes/membership/McastServiceImpl.java
@@ -400,18 +400,19 @@ public class McastServiceImpl extends
MembershipProviderBase {
log.trace("Mcast receive ping from member " + m);
}
Runnable t = null;
+ Thread currentThread = Thread.currentThread();
if (Arrays.equals(m.getCommand(), Member.SHUTDOWN_PAYLOAD)) {
if (log.isDebugEnabled()) {
log.debug("Member has shutdown:" + m);
}
membership.removeMember(m);
t = () -> {
- String name = Thread.currentThread().getName();
+ String name = currentThread.getName();
try {
-
Thread.currentThread().setName("Membership-MemberDisappeared");
+ currentThread.setName("Membership-MemberDisappeared");
service.memberDisappeared(m);
- }finally {
- Thread.currentThread().setName(name);
+ } finally {
+ currentThread.setName(name);
}
};
} else if (membership.memberAlive(m)) {
@@ -419,16 +420,16 @@ public class McastServiceImpl extends
MembershipProviderBase {
log.debug("Mcast add member " + m);
}
t = () -> {
- String name = Thread.currentThread().getName();
+ String name = currentThread.getName();
try {
- Thread.currentThread().setName("Membership-MemberAdded");
+ currentThread.setName("Membership-MemberAdded");
service.memberAdded(m);
- }finally {
- Thread.currentThread().setName(name);
+ } finally {
+ currentThread.setName(name);
}
};
- } //end if
- if ( t != null ) {
+ }
+ if (t != null) {
executor.execute(t);
}
}
@@ -449,9 +450,10 @@ public class McastServiceImpl extends
MembershipProviderBase {
}
}
Runnable t = () -> {
- String name = Thread.currentThread().getName();
+ Thread currentThread = Thread.currentThread();
+ String name = currentThread.getName();
try {
- Thread.currentThread().setName("Membership-MemberAdded");
+ currentThread.setName("Membership-MemberAdded");
for (ChannelData datum : data) {
try {
if (datum != null &&
!member.equals(datum.getAddress())) {
@@ -467,8 +469,8 @@ public class McastServiceImpl extends
MembershipProviderBase {
log.error(sm.getString("mcastServiceImpl.unableReceive.broadcastMessage"), t1);
}
}
- }finally {
- Thread.currentThread().setName(name);
+ } finally {
+ currentThread.setName(name);
}
};
executor.execute(t);
@@ -485,12 +487,13 @@ public class McastServiceImpl extends
MembershipProviderBase {
}
try {
Runnable t = () -> {
- String name = Thread.currentThread().getName();
+ Thread currentThread = Thread.currentThread();
+ String name = currentThread.getName();
try {
-
Thread.currentThread().setName("Membership-MemberExpired");
+ currentThread.setName("Membership-MemberExpired");
service.memberDisappeared(member);
} finally {
- Thread.currentThread().setName(name);
+ currentThread.setName(name);
}
};
executor.execute(t);
diff --git
a/java/org/apache/catalina/tribes/membership/StaticMembershipProvider.java
b/java/org/apache/catalina/tribes/membership/StaticMembershipProvider.java
index 250a37d136..a4406b94c6 100644
--- a/java/org/apache/catalina/tribes/membership/StaticMembershipProvider.java
+++ b/java/org/apache/catalina/tribes/membership/StaticMembershipProvider.java
@@ -159,12 +159,13 @@ public class StaticMembershipProvider extends
MembershipProviderBase implements
Member mbr = setupMember(member);
if(membership.memberAlive(mbr)) {
Runnable r = () -> {
- String name = Thread.currentThread().getName();
+ Thread currentThread = Thread.currentThread();
+ String name = currentThread.getName();
try {
-
Thread.currentThread().setName("StaticMembership-memberAdded");
+ currentThread.setName("StaticMembership-memberAdded");
membershipListener.memberAdded(mbr);
} finally {
- Thread.currentThread().setName(name);
+ currentThread.setName(name);
}
};
executor.execute(r);
@@ -174,12 +175,13 @@ public class StaticMembershipProvider extends
MembershipProviderBase implements
protected void memberDisappeared(Member member) {
membership.removeMember(member);
Runnable r = () -> {
- String name = Thread.currentThread().getName();
+ Thread currentThread = Thread.currentThread();
+ String name = currentThread.getName();
try {
-
Thread.currentThread().setName("StaticMembership-memberDisappeared");
+ currentThread.setName("StaticMembership-memberDisappeared");
membershipListener.memberDisappeared(member);
} finally {
- Thread.currentThread().setName(name);
+ currentThread.setName(name);
}
};
executor.execute(r);
diff --git
a/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java
b/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java
index 8bab726f87..67300cc454 100644
---
a/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java
+++
b/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java
@@ -156,17 +156,18 @@ public abstract class CloudMembershipProvider extends
MembershipProviderBase imp
log.debug(message);
}
Runnable r = () -> {
- String name = Thread.currentThread().getName();
+ Thread currentThread = Thread.currentThread();
+ String name = currentThread.getName();
try {
String threadName = add ? "CloudMembership-memberAdded" :
"CloudMembership-memberDisappeared";
- Thread.currentThread().setName(threadName);
+ currentThread.setName(threadName);
if (add) {
membershipListener.memberAdded(member);
} else {
membershipListener.memberDisappeared(member);
}
} finally {
- Thread.currentThread().setName(name);
+ currentThread.setName(name);
}
};
executor.execute(r);
diff --git a/java/org/apache/catalina/valves/StuckThreadDetectionValve.java
b/java/org/apache/catalina/valves/StuckThreadDetectionValve.java
index 584379dfa7..42b950d825 100644
--- a/java/org/apache/catalina/valves/StuckThreadDetectionValve.java
+++ b/java/org/apache/catalina/valves/StuckThreadDetectionValve.java
@@ -173,13 +173,14 @@ public class StuckThreadDetectionValve extends ValveBase {
// Keeping a reference to the thread object here does not prevent
// GC'ing, as the reference is removed from the Map in the finally
clause
- Long key = Long.valueOf(Thread.currentThread().getId());
+ Thread currentThread = Thread.currentThread();
+ Long key = Long.valueOf(currentThread.getId());
StringBuffer requestUrl = request.getRequestURL();
if (request.getQueryString() != null) {
requestUrl.append('?');
requestUrl.append(request.getQueryString());
}
- MonitoredThread monitoredThread = new
MonitoredThread(Thread.currentThread(), requestUrl.toString(),
+ MonitoredThread monitoredThread = new MonitoredThread(currentThread,
requestUrl.toString(),
interruptThreadThreshold > 0);
activeThreads.put(key, monitoredThread);
diff --git a/java/org/apache/coyote/AsyncStateMachine.java b/java/org/apache/coyote/AsyncStateMachine.java
index 16d270b6f6..d2bcae1b0d 100644
--- a/java/org/apache/coyote/AsyncStateMachine.java
+++ b/java/org/apache/coyote/AsyncStateMachine.java
@@ -432,27 +432,28 @@ class AsyncStateMachine {
// Execute the runnable using a container thread from the
// Connector's thread pool. Use a wrapper to prevent a memory leak
ClassLoader oldCL;
+ Thread currentThread = Thread.currentThread();
if (Constants.IS_SECURITY_ENABLED) {
- PrivilegedAction<ClassLoader> pa = new PrivilegedGetTccl();
+ PrivilegedAction<ClassLoader> pa = new
PrivilegedGetTccl(currentThread);
oldCL = AccessController.doPrivileged(pa);
} else {
- oldCL = Thread.currentThread().getContextClassLoader();
+ oldCL = currentThread.getContextClassLoader();
}
try {
if (Constants.IS_SECURITY_ENABLED) {
- PrivilegedAction<Void> pa = new
PrivilegedSetTccl(this.getClass().getClassLoader());
+ PrivilegedAction<Void> pa = new
PrivilegedSetTccl(currentThread, this.getClass().getClassLoader());
AccessController.doPrivileged(pa);
} else {
-
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+
currentThread.setContextClassLoader(this.getClass().getClassLoader());
}
processor.execute(runnable);
} finally {
if (Constants.IS_SECURITY_ENABLED) {
- PrivilegedAction<Void> pa = new PrivilegedSetTccl(oldCL);
+ PrivilegedAction<Void> pa = new
PrivilegedSetTccl(currentThread, oldCL);
AccessController.doPrivileged(pa);
} else {
- Thread.currentThread().setContextClassLoader(oldCL);
+ currentThread.setContextClassLoader(oldCL);
}
}
} else {
diff --git a/java/org/apache/jasper/JspC.java b/java/org/apache/jasper/JspC.java
index 9a259ea731..400fa256ed 100644
--- a/java/org/apache/jasper/JspC.java
+++ b/java/org/apache/jasper/JspC.java
@@ -1294,6 +1294,7 @@ public class JspC extends Task implements Options {
}
ClassLoader originalClassLoader = null;
+ Thread currentThread = Thread.currentThread();
try {
// set up a scratch/output dir if none is provided
@@ -1318,8 +1319,8 @@ public class JspC extends Task implements Options {
clctxt.setBasePackageName(targetPackage);
}
- originalClassLoader = Thread.currentThread().getContextClassLoader();
- Thread.currentThread().setContextClassLoader(loader);
+ originalClassLoader = currentThread.getContextClassLoader();
+ currentThread.setContextClassLoader(loader);
clctxt.setClassLoader(loader);
clctxt.setClassPath(classPath);
@@ -1363,8 +1364,8 @@ public class JspC extends Task implements Options {
}
throw new JasperException(e);
} finally {
- if(originalClassLoader != null) {
-
Thread.currentThread().setContextClassLoader(originalClassLoader);
+ if (originalClassLoader != null) {
+ currentThread.setContextClassLoader(originalClassLoader);
}
}
}
diff --git a/java/org/apache/jasper/compiler/ELFunctionMapper.java
b/java/org/apache/jasper/compiler/ELFunctionMapper.java
index 7da9b947f0..dd97df38f3 100644
--- a/java/org/apache/jasper/compiler/ELFunctionMapper.java
+++ b/java/org/apache/jasper/compiler/ELFunctionMapper.java
@@ -311,11 +311,12 @@ public class ELFunctionMapper {
Class<?> clazz;
ClassLoader tccl;
+ Thread currentThread = Thread.currentThread();
if (Constants.IS_SECURITY_ENABLED) {
- PrivilegedAction<ClassLoader> pa = new PrivilegedGetTccl();
+ PrivilegedAction<ClassLoader> pa = new
PrivilegedGetTccl(currentThread);
tccl = AccessController.doPrivileged(pa);
} else {
- tccl = Thread.currentThread().getContextClassLoader();
+ tccl = currentThread.getContextClassLoader();
}
try {
diff --git a/java/org/apache/jasper/compiler/JspDocumentParser.java
b/java/org/apache/jasper/compiler/JspDocumentParser.java
index 52f480ba0d..a068dcfdfd 100644
--- a/java/org/apache/jasper/compiler/JspDocumentParser.java
+++ b/java/org/apache/jasper/compiler/JspDocumentParser.java
@@ -1457,16 +1457,16 @@ class JspDocumentParser
throws Exception {
ClassLoader original;
+ Thread currentThread = Thread.currentThread();
if (Constants.IS_SECURITY_ENABLED) {
- PrivilegedGetTccl pa = new PrivilegedGetTccl();
+ PrivilegedGetTccl pa = new PrivilegedGetTccl(currentThread);
original = AccessController.doPrivileged(pa);
} else {
original = Thread.currentThread().getContextClassLoader();
}
try {
if (Constants.IS_SECURITY_ENABLED) {
- PrivilegedSetTccl pa =
- new
PrivilegedSetTccl(JspDocumentParser.class.getClassLoader());
+ PrivilegedSetTccl pa = new PrivilegedSetTccl(currentThread,
JspDocumentParser.class.getClassLoader());
AccessController.doPrivileged(pa);
} else {
Thread.currentThread().setContextClassLoader(
@@ -1502,10 +1502,10 @@ class JspDocumentParser
return saxParser;
} finally {
if (Constants.IS_SECURITY_ENABLED) {
- PrivilegedSetTccl pa = new PrivilegedSetTccl(original);
+ PrivilegedSetTccl pa = new PrivilegedSetTccl(currentThread,
original);
AccessController.doPrivileged(pa);
} else {
- Thread.currentThread().setContextClassLoader(original);
+ currentThread.setContextClassLoader(original);
}
}
}
diff --git a/java/org/apache/jasper/compiler/TagPluginManager.java
b/java/org/apache/jasper/compiler/TagPluginManager.java
index 47e0cbe405..05efec1270 100644
--- a/java/org/apache/jasper/compiler/TagPluginManager.java
+++ b/java/org/apache/jasper/compiler/TagPluginManager.java
@@ -77,20 +77,19 @@ public class TagPluginManager {
TagPluginParser parser;
ClassLoader original;
+ Thread currentThread = Thread.currentThread();
if (Constants.IS_SECURITY_ENABLED) {
- PrivilegedGetTccl pa = new PrivilegedGetTccl();
+ PrivilegedGetTccl pa = new PrivilegedGetTccl(currentThread);
original = AccessController.doPrivileged(pa);
} else {
original = Thread.currentThread().getContextClassLoader();
}
try {
if (Constants.IS_SECURITY_ENABLED) {
- PrivilegedSetTccl pa =
- new
PrivilegedSetTccl(TagPluginManager.class.getClassLoader());
+ PrivilegedSetTccl pa = new PrivilegedSetTccl(currentThread,
TagPluginManager.class.getClassLoader());
AccessController.doPrivileged(pa);
} else {
- Thread.currentThread().setContextClassLoader(
- TagPluginManager.class.getClassLoader());
+
currentThread.setContextClassLoader(TagPluginManager.class.getClassLoader());
}
parser = new TagPluginParser(ctxt, blockExternal);
@@ -110,10 +109,10 @@ public class TagPluginManager {
throw new JasperException(e);
} finally {
if (Constants.IS_SECURITY_ENABLED) {
- PrivilegedSetTccl pa = new PrivilegedSetTccl(original);
+ PrivilegedSetTccl pa = new PrivilegedSetTccl(currentThread,
original);
AccessController.doPrivileged(pa);
} else {
- Thread.currentThread().setContextClassLoader(original);
+ currentThread.setContextClassLoader(original);
}
}
diff --git a/java/org/apache/naming/ContextBindings.java b/java/org/apache/naming/ContextBindings.java
index baf3ce2bdb..9c4895acc2 100644
--- a/java/org/apache/naming/ContextBindings.java
+++ b/java/org/apache/naming/ContextBindings.java
@@ -142,8 +142,9 @@ public class ContextBindings {
throw new NamingException(
sm.getString("contextBindings.unknownContext", obj));
}
- threadBindings.put(Thread.currentThread(), context);
- threadObjectBindings.put(Thread.currentThread(), obj);
+ Thread currentThread = Thread.currentThread();
+ threadBindings.put(currentThread, context);
+ threadObjectBindings.put(currentThread, obj);
}
}
@@ -156,8 +157,9 @@ public class ContextBindings {
*/
public static void unbindThread(Object obj, Object token) {
if (ContextAccessController.checkSecurityToken(obj, token)) {
- threadBindings.remove(Thread.currentThread());
- threadObjectBindings.remove(Thread.currentThread());
+ Thread currentThread = Thread.currentThread();
+ threadBindings.remove(currentThread);
+ threadObjectBindings.remove(currentThread);
}
}
diff --git a/java/org/apache/tomcat/util/descriptor/tld/TldParser.java b/java/org/apache/tomcat/util/descriptor/tld/TldParser.java
index e31c2fea58..b19917c3f3 100644
--- a/java/org/apache/tomcat/util/descriptor/tld/TldParser.java
+++ b/java/org/apache/tomcat/util/descriptor/tld/TldParser.java
@@ -52,18 +52,19 @@ public class TldParser {
public TaglibXml parse(TldResourcePath path) throws IOException, SAXException {
ClassLoader original;
+ Thread currentThread = Thread.currentThread();
if (Constants.IS_SECURITY_ENABLED) {
- PrivilegedGetTccl pa = new PrivilegedGetTccl();
+ PrivilegedGetTccl pa = new PrivilegedGetTccl(currentThread);
original = AccessController.doPrivileged(pa);
} else {
original = Thread.currentThread().getContextClassLoader();
}
try (InputStream is = path.openStream()) {
if (Constants.IS_SECURITY_ENABLED) {
- PrivilegedSetTccl pa = new
PrivilegedSetTccl(TldParser.class.getClassLoader());
+ PrivilegedSetTccl pa = new PrivilegedSetTccl(currentThread,
TldParser.class.getClassLoader());
AccessController.doPrivileged(pa);
} else {
-
Thread.currentThread().setContextClassLoader(TldParser.class.getClassLoader());
+
currentThread.setContextClassLoader(TldParser.class.getClassLoader());
}
XmlErrorHandler handler = new XmlErrorHandler();
digester.setErrorHandler(handler);
@@ -85,10 +86,10 @@ public class TldParser {
} finally {
digester.reset();
if (Constants.IS_SECURITY_ENABLED) {
- PrivilegedSetTccl pa = new PrivilegedSetTccl(original);
+ PrivilegedSetTccl pa = new PrivilegedSetTccl(currentThread,
original);
AccessController.doPrivileged(pa);
} else {
- Thread.currentThread().setContextClassLoader(original);
+ currentThread.setContextClassLoader(original);
}
}
}
diff --git a/java/org/apache/tomcat/util/security/PrivilegedGetTccl.java
b/java/org/apache/tomcat/util/security/PrivilegedGetTccl.java
index 11d11a8602..c580cfab50 100644
--- a/java/org/apache/tomcat/util/security/PrivilegedGetTccl.java
+++ b/java/org/apache/tomcat/util/security/PrivilegedGetTccl.java
@@ -19,10 +19,19 @@ package org.apache.tomcat.util.security;
import java.security.PrivilegedAction;
public class PrivilegedGetTccl implements PrivilegedAction<ClassLoader> {
+ private final Thread currentThread;
+
+ @Deprecated
+ public PrivilegedGetTccl() {
+ this(Thread.currentThread());
+ }
+
+ public PrivilegedGetTccl(Thread currentThread) {
+ this.currentThread = currentThread;
+ }
+
@Override
public ClassLoader run() {
- return Thread.currentThread().getContextClassLoader();
+ return currentThread.getContextClassLoader();
}
}
-
-
diff --git a/java/org/apache/tomcat/util/security/PrivilegedSetTccl.java
b/java/org/apache/tomcat/util/security/PrivilegedSetTccl.java
index 739d915794..188a8ae08e 100644
--- a/java/org/apache/tomcat/util/security/PrivilegedSetTccl.java
+++ b/java/org/apache/tomcat/util/security/PrivilegedSetTccl.java
@@ -23,6 +23,7 @@ public class PrivilegedSetTccl implements
PrivilegedAction<Void> {
private final ClassLoader cl;
private final Thread t;
+ @Deprecated
public PrivilegedSetTccl(ClassLoader cl) {
this(Thread.currentThread(), cl);
}
diff --git a/java/org/apache/tomcat/util/threads/ThreadPoolExecutor.java
b/java/org/apache/tomcat/util/threads/ThreadPoolExecutor.java
index 1844dcba28..c41a783e06 100644
--- a/java/org/apache/tomcat/util/threads/ThreadPoolExecutor.java
+++ b/java/org/apache/tomcat/util/threads/ThreadPoolExecutor.java
@@ -2193,9 +2193,9 @@ public class ThreadPoolExecutor extends
AbstractExecutorService {
protected boolean currentThreadShouldBeStopped() {
- if (threadRenewalDelay >= 0
- && Thread.currentThread() instanceof TaskThread) {
- TaskThread currentTaskThread = (TaskThread) Thread.currentThread();
+ Thread currentThread = Thread.currentThread();
+ if (threadRenewalDelay >= 0 && currentThread instanceof TaskThread) {
+ TaskThread currentTaskThread = (TaskThread) currentThread;
if (currentTaskThread.getCreationTime() <
this.lastContextStoppedTime.longValue()) {
return true;
diff --git a/java/org/apache/tomcat/websocket/AsyncChannelGroupUtil.java
b/java/org/apache/tomcat/websocket/AsyncChannelGroupUtil.java
index dd688db273..6bf48ed076 100644
--- a/java/org/apache/tomcat/websocket/AsyncChannelGroupUtil.java
+++ b/java/org/apache/tomcat/websocket/AsyncChannelGroupUtil.java
@@ -74,11 +74,11 @@ public class AsyncChannelGroupUtil {
private static AsynchronousChannelGroup createAsynchronousChannelGroup() {
// Need to do this with the right thread context class loader else the
// first web app to call this will trigger a leak
- ClassLoader original = Thread.currentThread().getContextClassLoader();
+ Thread currentThread = Thread.currentThread();
+ ClassLoader original = currentThread.getContextClassLoader();
try {
- Thread.currentThread().setContextClassLoader(
- AsyncIOThreadFactory.class.getClassLoader());
+
currentThread.setContextClassLoader(AsyncIOThreadFactory.class.getClassLoader());
// These are the same settings as the default
// AsynchronousChannelGroup
@@ -98,7 +98,7 @@ public class AsyncChannelGroupUtil {
throw new
IllegalStateException(sm.getString("asyncChannelGroup.createFail"));
}
} finally {
- Thread.currentThread().setContextClassLoader(original);
+ currentThread.setContextClassLoader(original);
}
}
diff --git a/java/org/apache/tomcat/websocket/server/WsFrameServer.java b/java/org/apache/tomcat/websocket/server/WsFrameServer.java
index d29ea047aa..c40ae31095 100644
--- a/java/org/apache/tomcat/websocket/server/WsFrameServer.java
+++ b/java/org/apache/tomcat/websocket/server/WsFrameServer.java
@@ -123,24 +123,26 @@ public class WsFrameServer extends WsFrameBase {
@Override
protected void sendMessageText(boolean last) throws WsIOException {
- ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ Thread currentThread = Thread.currentThread();
+ ClassLoader cl = currentThread.getContextClassLoader();
try {
-
Thread.currentThread().setContextClassLoader(applicationClassLoader);
+ currentThread.setContextClassLoader(applicationClassLoader);
super.sendMessageText(last);
} finally {
- Thread.currentThread().setContextClassLoader(cl);
+ currentThread.setContextClassLoader(cl);
}
}
@Override
protected void sendMessageBinary(ByteBuffer msg, boolean last) throws
WsIOException {
- ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ Thread currentThread = Thread.currentThread();
+ ClassLoader cl = currentThread.getContextClassLoader();
try {
-
Thread.currentThread().setContextClassLoader(applicationClassLoader);
+ currentThread.setContextClassLoader(applicationClassLoader);
super.sendMessageBinary(msg, last);
} finally {
- Thread.currentThread().setContextClassLoader(cl);
+ currentThread.setContextClassLoader(cl);
}
}
diff --git a/test/org/apache/catalina/loader/TestWebappClassLoaderExecutorMemoryLeak.java b/test/org/apache/catalina/loader/TestWebappClassLoaderExecutorMemoryLeak.java
index f54d604e00..805a126c6d 100644
---
a/test/org/apache/catalina/loader/TestWebappClassLoaderExecutorMemoryLeak.java
+++
b/test/org/apache/catalina/loader/TestWebappClassLoaderExecutorMemoryLeak.java
@@ -114,16 +114,15 @@ public class TestWebappClassLoaderExecutorMemoryLeak
extends TomcatBaseTest {
@Override
public void run() {
+ Thread currentThread = Thread.currentThread();
try {
- while (!Thread.currentThread().isInterrupted()) {
+ while (!currentThread.isInterrupted()) {
Thread.sleep(20000);
- System.out.println(Thread.currentThread().getClass()
- + " [" + Thread.currentThread().getName()
- + "] executing " + this._id);
+ System.out.println(
+ currentThread.getClass() + " [" +
currentThread.getName() + "] executing " + this._id);
}
} catch (InterruptedException e) {
- System.out.println(Thread.currentThread().getClass() + " ["
- + Thread.currentThread().getName() + "] EXITING");
+ System.out.println(currentThread.getClass() + " [" +
currentThread.getName() + "] EXITING");
}
}
}
diff --git a/test/org/apache/catalina/startup/TestTomcatClassLoader.java
b/test/org/apache/catalina/startup/TestTomcatClassLoader.java
index ff2bccd114..59cdbee4e6 100644
--- a/test/org/apache/catalina/startup/TestTomcatClassLoader.java
+++ b/test/org/apache/catalina/startup/TestTomcatClassLoader.java
@@ -54,10 +54,9 @@ public class TestTomcatClassLoader extends TomcatBaseTest {
@Test
public void testNonDefaultClassLoader() throws Exception {
- ClassLoader cl = new URLClassLoader(new URL[0],
- Thread.currentThread().getContextClassLoader());
-
- Thread.currentThread().setContextClassLoader(cl);
+ Thread currentThread = Thread.currentThread();
+ ClassLoader cl = new URLClassLoader(new URL[0],
currentThread.getContextClassLoader());
+ currentThread.setContextClassLoader(cl);
Tomcat tomcat = getTomcatInstance();
tomcat.getServer().setParentClassLoader(cl);
diff --git a/test/org/apache/juli/TestClassLoaderLogManager.java
b/test/org/apache/juli/TestClassLoaderLogManager.java
index 674600edf4..b2482af790 100644
--- a/test/org/apache/juli/TestClassLoaderLogManager.java
+++ b/test/org/apache/juli/TestClassLoaderLogManager.java
@@ -93,9 +93,10 @@ public class TestClassLoaderLogManager {
@Test
public void testBug66184() throws IOException {
final ClassLoader cl = new TestClassLoader();
- final ClassLoader oldCL =
Thread.currentThread().getContextClassLoader();
+ final Thread currentThread = Thread.currentThread();
+ final ClassLoader oldCL = currentThread.getContextClassLoader();
try {
- Thread.currentThread().setContextClassLoader(cl);
+ currentThread.setContextClassLoader(cl);
final ClassLoaderLogManager logManager = new
ClassLoaderLogManager();
logManager.readConfiguration();
final Logger rootLogger = logManager.getLogger("");
@@ -103,7 +104,7 @@ public class TestClassLoaderLogManager {
Assert.assertNull("root logger has a parent",
rootLogger.getParent());
Assert.assertEquals(Level.INFO, rootLogger.getLevel());
} finally {
- Thread.currentThread().setContextClassLoader(oldCL);
+ currentThread.setContextClassLoader(oldCL);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org