Author: markt
Date: Sat Nov 17 14:53:03 2012
New Revision: 1410732

URL: http://svn.apache.org/viewvc?rev=1410732&view=rev
Log:
Fix a FindBugs issue (incorrect synchronization)

Modified:
    tomcat/trunk/java/org/apache/tomcat/util/modeler/NotificationInfo.java

Modified: tomcat/trunk/java/org/apache/tomcat/util/modeler/NotificationInfo.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/modeler/NotificationInfo.java?rev=1410732&r1=1410731&r2=1410732&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/modeler/NotificationInfo.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/modeler/NotificationInfo.java Sat 
Nov 17 14:53:03 2012
@@ -14,14 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-
 package org.apache.tomcat.util.modeler;
 
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
 
 import javax.management.MBeanNotificationInfo;
 
-
 /**
  * <p>Internal configuration information for a <code>Notification</code>
  * descriptor.</p>
@@ -29,8 +29,8 @@ import javax.management.MBeanNotificatio
  * @author Craig R. McClanahan
  * @version $Id$
  */
-
 public class NotificationInfo extends FeatureInfo {
+
     static final long serialVersionUID = -6319885418912650856L;
 
     // ----------------------------------------------------- Instance Variables
@@ -42,6 +42,7 @@ public class NotificationInfo extends Fe
      */
     transient MBeanNotificationInfo info = null;
     protected String notifTypes[] = new String[0];
+    protected ReadWriteLock notifTypesLock = new ReentrantReadWriteLock();
 
     // ------------------------------------------------------------- Properties
 
@@ -74,7 +75,13 @@ public class NotificationInfo extends Fe
      * The set of notification types for this MBean.
      */
     public String[] getNotifTypes() {
-        return (this.notifTypes);
+        Lock readLock = notifTypesLock.readLock();
+        try {
+            readLock.lock();
+            return this.notifTypes;
+        } finally {
+            readLock.unlock();
+        }
     }
 
 
@@ -88,14 +95,18 @@ public class NotificationInfo extends Fe
      */
     public void addNotifType(String notifType) {
 
-        synchronized (notifTypes) {
+        Lock writeLock = notifTypesLock.writeLock();
+        try {
+            writeLock.lock();
+
             String results[] = new String[notifTypes.length + 1];
             System.arraycopy(notifTypes, 0, results, 0, notifTypes.length);
             results[notifTypes.length] = notifType;
             notifTypes = results;
             this.info = null;
+        } finally {
+            writeLock.unlock();
         }
-
     }
 
 
@@ -107,7 +118,7 @@ public class NotificationInfo extends Fe
 
         // Return our cached information (if any)
         if (info != null)
-            return (info);
+            return info;
 
         // Create and return a new information object
         info = new MBeanNotificationInfo
@@ -115,7 +126,7 @@ public class NotificationInfo extends Fe
         //Descriptor descriptor = info.getDescriptor();
         //addFields(descriptor);
         //info.setDescriptor(descriptor);
-        return (info);
+        return info;
 
     }
 
@@ -132,11 +143,14 @@ public class NotificationInfo extends Fe
         sb.append(", description=");
         sb.append(description);
         sb.append(", notifTypes=");
-        sb.append(notifTypes.length);
+        Lock readLock = notifTypesLock.readLock();
+        try {
+            readLock.lock();
+            sb.append(notifTypes.length);
+        } finally {
+            readLock.unlock();
+        }
         sb.append("]");
         return (sb.toString());
-
     }
-
-
 }



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

Reply via email to