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