Author: markt Date: Sat Nov 17 15:20:08 2012 New Revision: 1410740 URL: http://svn.apache.org/viewvc?rev=1410740&view=rev Log: Fix a FindBugs issue (incorrect synchronization)
Modified: tomcat/trunk/java/org/apache/tomcat/util/modeler/OperationInfo.java Modified: tomcat/trunk/java/org/apache/tomcat/util/modeler/OperationInfo.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/modeler/OperationInfo.java?rev=1410740&r1=1410739&r2=1410740&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/modeler/OperationInfo.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/modeler/OperationInfo.java Sat Nov 17 15:20:08 2012 @@ -14,17 +14,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - - package org.apache.tomcat.util.modeler; - import java.util.Locale; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; import javax.management.MBeanOperationInfo; import javax.management.MBeanParameterInfo; - /** * <p>Internal configuration information for an <code>Operation</code> * descriptor.</p> @@ -32,23 +31,24 @@ import javax.management.MBeanParameterIn * @author Craig R. McClanahan */ public class OperationInfo extends FeatureInfo { + static final long serialVersionUID = 4418342922072614875L; - // ----------------------------------------------------------- Constructors + // ----------------------------------------------------------- Constructors /** * Standard zero-arguments constructor. */ public OperationInfo() { - super(); - } + // ----------------------------------------------------- Instance Variables protected String impact = "UNKNOWN"; protected String role = "operation"; + protected ReadWriteLock parametersLock = new ReentrantReadWriteLock(); protected ParameterInfo parameters[] = new ParameterInfo[0]; @@ -59,7 +59,7 @@ public class OperationInfo extends Featu * string value "ACTION", "ACTION_INFO", "INFO", or "UNKNOWN". */ public String getImpact() { - return (this.impact); + return this.impact; } public void setImpact(String impact) { @@ -75,7 +75,7 @@ public class OperationInfo extends Featu * "constructor"). */ public String getRole() { - return (this.role); + return this.role; } public void setRole(String role) { @@ -102,7 +102,13 @@ public class OperationInfo extends Featu * The set of parameters for this operation. */ public ParameterInfo[] getSignature() { - return (this.parameters); + Lock readLock = parametersLock.readLock(); + try { + readLock.lock(); + return this.parameters; + } finally { + readLock.unlock(); + } } // --------------------------------------------------------- Public Methods @@ -115,14 +121,17 @@ public class OperationInfo extends Featu */ public void addParameter(ParameterInfo parameter) { - synchronized (parameters) { + Lock writeLock = parametersLock.writeLock(); + try { + writeLock.lock(); ParameterInfo results[] = new ParameterInfo[parameters.length + 1]; System.arraycopy(parameters, 0, results, 0, parameters.length); results[parameters.length] = parameter; parameters = results; this.info = null; + } finally { + writeLock.unlock(); } - } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org