You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2012/11/07 21:16:19 UTC

svn commit: r1406788 - in /tomcat/trunk: java/org/apache/jasper/compiler/ java/org/apache/tomcat/util/modeler/ java/org/apache/tomcat/util/net/ res/findbugs/ test/org/apache/jasper/tagplugins/jstl/core/

Author: markt
Date: Wed Nov  7 20:16:19 2012
New Revision: 1406788

URL: http://svn.apache.org/viewvc?rev=1406788&view=rev
Log:
FindBugs issues

Modified:
    tomcat/trunk/java/org/apache/jasper/compiler/JspUtil.java
    tomcat/trunk/java/org/apache/tomcat/util/modeler/ManagedBean.java
    tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
    tomcat/trunk/res/findbugs/filter-false-positives.xml
    tomcat/trunk/test/org/apache/jasper/tagplugins/jstl/core/AbstractTestTag.java

Modified: tomcat/trunk/java/org/apache/jasper/compiler/JspUtil.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/JspUtil.java?rev=1406788&r1=1406787&r2=1406788&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/JspUtil.java (original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/JspUtil.java Wed Nov  7 20:16:19 2012
@@ -1002,6 +1002,13 @@ public class JspUtil {
                 break;
             }
         }
+
+        if (t == null) {
+            // Should never happen
+            throw new IllegalArgumentException("Unable to extract type from [" +
+                    type + "]");
+        }
+
         StringBuilder resultType = new StringBuilder(t);
         for (; dims > 0; dims--) {
             resultType.append("[]");

Modified: tomcat/trunk/java/org/apache/tomcat/util/modeler/ManagedBean.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/modeler/ManagedBean.java?rev=1406788&r1=1406787&r2=1406788&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/modeler/ManagedBean.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/modeler/ManagedBean.java Wed Nov  7 20:16:19 2012
@@ -22,6 +22,9 @@ package org.apache.tomcat.util.modeler;
 import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
 
 import javax.management.AttributeNotFoundException;
 import javax.management.DynamicMBean;
@@ -55,11 +58,12 @@ public class ManagedBean implements java
     static final Class<?>[] NO_ARGS_PARAM_SIG = new Class[0];
 
 
+    private ReadWriteLock mBeanInfoLock = new ReentrantReadWriteLock();
     /**
      * The <code>ModelMBeanInfo</code> object that corresponds
      * to this <code>ManagedBean</code> instance.
      */
-    transient MBeanInfo info = null;
+    private transient MBeanInfo info = null;
 
     private Map<String,AttributeInfo> attributes = new HashMap<>();
 
@@ -71,7 +75,7 @@ public class ManagedBean implements java
     protected String group = null;
     protected String name = null;
 
-    protected NotificationInfo notifications[] = new NotificationInfo[0];
+    private NotificationInfo notifications[] = new NotificationInfo[0];
     protected String type = null;
 
     /** Constructor. Will add default attributes.
@@ -110,8 +114,14 @@ public class ManagedBean implements java
     }
 
     public void setClassName(String className) {
-        this.className = className;
-        this.info = null;
+        Lock l = mBeanInfoLock.writeLock();
+        l.lock();
+        try {
+            this.className = className;
+            this.info = null;
+        } finally {
+            l.unlock();
+        }
     }
 
 
@@ -123,8 +133,14 @@ public class ManagedBean implements java
     }
 
     public void setDescription(String description) {
-        this.description = description;
-        this.info = null;
+        Lock l = mBeanInfoLock.writeLock();
+        l.lock();
+        try {
+            this.description = description;
+            this.info = null;
+        } finally {
+            l.unlock();
+        }
     }
 
 
@@ -162,8 +178,14 @@ public class ManagedBean implements java
     }
 
     public void setName(String name) {
-        this.name = name;
-        this.info = null;
+        Lock l = mBeanInfoLock.writeLock();
+        l.lock();
+        try {
+            this.name = name;
+            this.info = null;
+        } finally {
+            l.unlock();
+        }
     }
 
 
@@ -195,8 +217,14 @@ public class ManagedBean implements java
     }
 
     public void setType(String type) {
-        this.type = type;
-        this.info = null;
+        Lock l = mBeanInfoLock.writeLock();
+        l.lock();
+        try {
+            this.type = type;
+            this.info = null;
+        } finally {
+            l.unlock();
+        }
     }
 
 
@@ -220,7 +248,10 @@ public class ManagedBean implements java
      */
     public void addNotification(NotificationInfo notification) {
 
-        synchronized (notifications) {
+        Lock l = mBeanInfoLock.writeLock();
+
+        l.lock();
+        try {
             NotificationInfo results[] =
                 new NotificationInfo[notifications.length + 1];
             System.arraycopy(notifications, 0, results, 0,
@@ -228,8 +259,9 @@ public class ManagedBean implements java
             results[notifications.length] = notification;
             notifications = results;
             this.info = null;
+        } finally {
+            l.unlock();
         }
-
     }
 
 
@@ -348,40 +380,51 @@ public class ManagedBean implements java
     MBeanInfo getMBeanInfo() {
 
         // Return our cached information (if any)
-        if (info != null)
-            return (info);
-
-        // Create subordinate information descriptors as required
-        AttributeInfo attrs[] = getAttributes();
-        MBeanAttributeInfo attributes[] =
-            new MBeanAttributeInfo[attrs.length];
-        for (int i = 0; i < attrs.length; i++)
-            attributes[i] = attrs[i].createAttributeInfo();
-
-        OperationInfo opers[] = getOperations();
-        MBeanOperationInfo operations[] =
-            new MBeanOperationInfo[opers.length];
-        for (int i = 0; i < opers.length; i++)
-            operations[i] = opers[i].createOperationInfo();
-
-
-        NotificationInfo notifs[] = getNotifications();
-        MBeanNotificationInfo notifications[] =
-            new MBeanNotificationInfo[notifs.length];
-        for (int i = 0; i < notifs.length; i++)
-            notifications[i] = notifs[i].createNotificationInfo();
-
-
-        // Construct and return a new ModelMBeanInfo object
-        info = new MBeanInfo(getClassName(),
-                             getDescription(),
-                             attributes,
-                             new MBeanConstructorInfo[] {},
-                             operations,
-                             notifications);
-
-        return (info);
+        Lock l = mBeanInfoLock.readLock();
+        l.lock();
+        try {
+            if (info != null)
+                return info;
+        } finally {
+            l.unlock();
+        }
 
+        l = mBeanInfoLock.writeLock();
+        l.lock();
+        try {
+            // Create subordinate information descriptors as required
+            AttributeInfo attrs[] = getAttributes();
+            MBeanAttributeInfo attributes[] =
+                new MBeanAttributeInfo[attrs.length];
+            for (int i = 0; i < attrs.length; i++)
+                attributes[i] = attrs[i].createAttributeInfo();
+
+            OperationInfo opers[] = getOperations();
+            MBeanOperationInfo operations[] =
+                new MBeanOperationInfo[opers.length];
+            for (int i = 0; i < opers.length; i++)
+                operations[i] = opers[i].createOperationInfo();
+
+
+            NotificationInfo notifs[] = getNotifications();
+            MBeanNotificationInfo notifications[] =
+                new MBeanNotificationInfo[notifs.length];
+            for (int i = 0; i < notifs.length; i++)
+                notifications[i] = notifs[i].createNotificationInfo();
+
+
+            // Construct and return a new ModelMBeanInfo object
+            info = new MBeanInfo(getClassName(),
+                                 getDescription(),
+                                 attributes,
+                                 new MBeanConstructorInfo[] {},
+                                 operations,
+                                 notifications);
+
+            return info;
+        } finally {
+            l.unlock();
+        }
     }
 
 

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?rev=1406788&r1=1406787&r2=1406788&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Wed Nov  7 20:16:19 2012
@@ -1630,7 +1630,9 @@ public class NioEndpoint extends Abstrac
                     }
                 }catch ( Throwable t ) {
                     log.error("",t);
-                    socket.getPoller().cancelledKey(key,SocketStatus.ERROR);
+                    if (socket != null) {
+                        socket.getPoller().cancelledKey(key,SocketStatus.ERROR);
+                    }
                 } finally {
                     if (launch) {
                         try {

Modified: tomcat/trunk/res/findbugs/filter-false-positives.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/res/findbugs/filter-false-positives.xml?rev=1406788&r1=1406787&r2=1406788&view=diff
==============================================================================
--- tomcat/trunk/res/findbugs/filter-false-positives.xml (original)
+++ tomcat/trunk/res/findbugs/filter-false-positives.xml Wed Nov  7 20:16:19 2012
@@ -186,6 +186,19 @@
     <Bug code="ST" />
   </Match>
   <Match>
+    <!-- Node constructors add node to parent. Local variable is used to
+         silence an Eclipse warning -->
+    <Class name="org.apache.jasper.compiler.ELFunctionMapper"/>
+    <Method name="map"/>
+    <Bug code="DLS"/>
+  </Match>
+  <Match>
+    <!-- Node constructors add node to parent. Local variable is used to
+         silence an Eclipse warning -->
+    <Class name="org.apache.jasper.compiler.Parser"/>
+    <Bug code="DLS"/>
+  </Match>
+  <Match>
     <!-- Simpler to catch Exception than to create dummy implementations of the
          necessary exception hierarchy -->
     <Class name="org.apache.naming.factory.SendMailFactory$1" />
@@ -205,11 +218,6 @@
     <Bug code="Nm" />
   </Match>
   <Match>
-    <!-- Class has to implement clone since its superclass does but fakes it -->
-    <Class name="org.apache.naming.resources.ResourceAttributes" />
-    <Bug code="CN" />
-  </Match>
-  <Match>
     <!-- Use of == is deliberate -->
     <Class name="org.apache.tomcat.jdbc.pool.JdbcInterceptor" />
     <Method name="compare" />
@@ -288,6 +296,12 @@
     <Bug code="ML" />
   </Match>
   <Match>
+    <!-- Object is only ever set to null, sync therefore is still valid -->
+    <Class name="org.apache.tomcat.util.net.NioEndpoint$SocketProcessor"/>
+    <Method name="run"/>
+    <Bug code="ML"/>
+  </Match>
+  <Match>
     <Class name="org.apache.tomcat.util.net.SecureNioChannel"/>
     <Method name="rehandshake"/>
     <Bug code="DE" />

Modified: tomcat/trunk/test/org/apache/jasper/tagplugins/jstl/core/AbstractTestTag.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/jasper/tagplugins/jstl/core/AbstractTestTag.java?rev=1406788&r1=1406787&r2=1406788&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/jasper/tagplugins/jstl/core/AbstractTestTag.java (original)
+++ tomcat/trunk/test/org/apache/jasper/tagplugins/jstl/core/AbstractTestTag.java Wed Nov  7 20:16:19 2012
@@ -30,6 +30,7 @@ public abstract class AbstractTestTag ex
 
     @Before
     public void setup() throws Exception {
+        super.setUp();
         Tomcat tomcat = getTomcatInstance();
 
         File appDir = new File("test/webapp-3.0");



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org