You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2017/01/02 14:28:21 UTC
svn commit: r1776937 - in /tomcat/trunk:
java/org/apache/catalina/loader/WebappClassLoaderBase.java
webapps/docs/changelog.xml
Author: remm
Date: Mon Jan 2 14:28:20 2017
New Revision: 1776937
URL: http://svn.apache.org/viewvc?rev=1776937&view=rev
Log:
60513: Fix thread safety issue with RMI cleanup code.
Modified:
tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java
tomcat/trunk/webapps/docs/changelog.xml
Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java?rev=1776937&r1=1776936&r2=1776937&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java Mon Jan 2 14:28:20 2017
@@ -2077,37 +2077,39 @@ public abstract class WebappClassLoaderB
return;
}
- // Iterate over the values in the table
- if (objTable instanceof Map<?,?>) {
- Iterator<?> iter = ((Map<?,?>) objTable).values().iterator();
- while (iter.hasNext()) {
- Object obj = iter.next();
- Object cclObject = cclField.get(obj);
- if (this == cclObject) {
- iter.remove();
- Object stubObject = stubField.get(obj);
- log.error(sm.getString("webappClassLoader.clearRmi",
- stubObject.getClass().getName(), stubObject));
+ synchronized (objTable) {
+ // Iterate over the values in the table
+ if (objTable instanceof Map<?,?>) {
+ Iterator<?> iter = ((Map<?,?>) objTable).values().iterator();
+ while (iter.hasNext()) {
+ Object obj = iter.next();
+ Object cclObject = cclField.get(obj);
+ if (this == cclObject) {
+ iter.remove();
+ Object stubObject = stubField.get(obj);
+ log.error(sm.getString("webappClassLoader.clearRmi",
+ stubObject.getClass().getName(), stubObject));
+ }
}
}
- }
- // Clear the implTable map
- Field implTableField = objectTableClass.getDeclaredField("implTable");
- implTableField.setAccessible(true);
- Object implTable = implTableField.get(null);
- if (implTable == null) {
- return;
- }
+ // Clear the implTable map
+ Field implTableField = objectTableClass.getDeclaredField("implTable");
+ implTableField.setAccessible(true);
+ Object implTable = implTableField.get(null);
+ if (implTable == null) {
+ return;
+ }
- // Iterate over the values in the table
- if (implTable instanceof Map<?,?>) {
- Iterator<?> iter = ((Map<?,?>) implTable).values().iterator();
- while (iter.hasNext()) {
- Object obj = iter.next();
- Object cclObject = cclField.get(obj);
- if (this == cclObject) {
- iter.remove();
+ // Iterate over the values in the table
+ if (implTable instanceof Map<?,?>) {
+ Iterator<?> iter = ((Map<?,?>) implTable).values().iterator();
+ while (iter.hasNext()) {
+ Object obj = iter.next();
+ Object cclObject = cclField.get(obj);
+ if (this == cclObject) {
+ iter.remove();
+ }
}
}
}
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1776937&r1=1776936&r2=1776937&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Mon Jan 2 14:28:20 2017
@@ -56,6 +56,9 @@
Update the warnings that reference required options for running on Java
9 to use the latest syntax for those options. (markt)
</update>
+ <fix>
+ <bug>60513</bug>: Fix thread safety issue with RMI cleanup code. (remm)
+ </fix>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org