Author: markt
Date: Wed May 16 11:07:18 2018
New Revision: 1831700

URL: http://svn.apache.org/viewvc?rev=1831700&view=rev
Log:
Fix a SpotBugs warning (inconsistent sync)
Make setting of server thread-safe
Fix potential NPEs

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

Modified: tomcat/trunk/java/org/apache/tomcat/util/modeler/Registry.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/modeler/Registry.java?rev=1831700&r1=1831699&r2=1831700&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/modeler/Registry.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/modeler/Registry.java Wed May 16 
11:07:18 2018
@@ -91,7 +91,8 @@ public class Registry implements Registr
      * The <code>MBeanServer</code> instance that we will use to register
      * management beans.
      */
-    private MBeanServer server = null;
+    private volatile MBeanServer server = null;
+    private final Object serverLock = new Object();
 
     /**
      * The set of ManagedBean instances for the beans this registry
@@ -367,7 +368,7 @@ public class Registry implements Registr
         String type=null;
         MBeanInfo info=null;
         try {
-            info=server.getMBeanInfo(oname);
+            info = getMBeanServer().getMBeanInfo(oname);
         } catch (Exception e) {
             log.info( "Can't find metadata for object" + oname );
             return null;
@@ -394,7 +395,7 @@ public class Registry implements Registr
     {
         MBeanInfo info=null;
         try {
-            info=server.getMBeanInfo(oname);
+            info = getMBeanServer().getMBeanInfo(oname);
         } catch (Exception e) {
             log.info( "Can't find metadata " + oname );
             return null;
@@ -429,18 +430,22 @@ public class Registry implements Registr
      * <code>MBeanServer</code> instance.
      * @return the MBean server
      */
-    public synchronized MBeanServer getMBeanServer() {
+    public MBeanServer getMBeanServer() {
         if (server == null) {
-            long t1 = System.currentTimeMillis();
-            if (MBeanServerFactory.findMBeanServer(null).size() > 0) {
-                server = MBeanServerFactory.findMBeanServer(null).get(0);
-                if (log.isDebugEnabled()) {
-                    log.debug("Using existing MBeanServer " + 
(System.currentTimeMillis() - t1));
-                }
-            } else {
-                server = ManagementFactory.getPlatformMBeanServer();
-                if (log.isDebugEnabled()) {
-                    log.debug("Creating MBeanServer" + 
(System.currentTimeMillis() - t1));
+            synchronized (serverLock) {
+                if (server == null) {
+                    long t1 = System.currentTimeMillis();
+                    if (MBeanServerFactory.findMBeanServer(null).size() > 0) {
+                        server = 
MBeanServerFactory.findMBeanServer(null).get(0);
+                        if (log.isDebugEnabled()) {
+                            log.debug("Using existing MBeanServer " + 
(System.currentTimeMillis() - t1));
+                        }
+                    } else {
+                        server = ManagementFactory.getPlatformMBeanServer();
+                        if (log.isDebugEnabled()) {
+                            log.debug("Creating MBeanServer" + 
(System.currentTimeMillis() - t1));
+                        }
+                    }
                 }
             }
         }
@@ -719,10 +724,10 @@ public class Registry implements Registr
     // -------------------- Registration  --------------------
 
     @Override
-    public ObjectName preRegister(MBeanServer server,
-                                  ObjectName name) throws Exception
-    {
-        this.server=server;
+    public ObjectName preRegister(MBeanServer server, ObjectName name) throws 
Exception {
+        synchronized (serverLock) {
+            this.server = server;
+        }
         return name;
     }
 



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

Reply via email to