Author: markt Date: Wed Nov 21 14:16:18 2018 New Revision: 1847109 URL: http://svn.apache.org/viewvc?rev=1847109&view=rev Log: In theory it was possible that the lock would not be released. Reported by SpotBugs.
Modified: tomcat/trunk/java/org/apache/catalina/users/MemoryUserDatabase.java Modified: tomcat/trunk/java/org/apache/catalina/users/MemoryUserDatabase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/users/MemoryUserDatabase.java?rev=1847109&r1=1847108&r2=1847109&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/users/MemoryUserDatabase.java (original) +++ tomcat/trunk/java/org/apache/catalina/users/MemoryUserDatabase.java Wed Nov 21 14:16:18 2018 @@ -416,40 +416,42 @@ public class MemoryUserDatabase implemen @Override public void open() throws Exception { writeLock.lock(); - // Erase any previous groups and users - users.clear(); - groups.clear(); - roles.clear(); + try { + // Erase any previous groups and users + users.clear(); + groups.clear(); + roles.clear(); + + String pathName = getPathname(); + try (ConfigurationSource.Resource resource = ConfigFileLoader.getSource().getResource(pathName)) { + this.lastModified = resource.getURI().toURL().openConnection().getLastModified(); - String pathName = getPathname(); - try (ConfigurationSource.Resource resource = ConfigFileLoader.getSource().getResource(pathName)) { - this.lastModified = resource.getURI().toURL().openConnection().getLastModified(); + // Construct a digester to read the XML input file + Digester digester = new Digester(); + try { + digester.setFeature( + "http://apache.org/xml/features/allow-java-encodings", true); + } catch (Exception e) { + log.warn(sm.getString("memoryUserDatabase.xmlFeatureEncoding"), e); + } + digester.addFactoryCreate("tomcat-users/group", + new MemoryGroupCreationFactory(this), true); + digester.addFactoryCreate("tomcat-users/role", + new MemoryRoleCreationFactory(this), true); + digester.addFactoryCreate("tomcat-users/user", + new MemoryUserCreationFactory(this), true); - // Construct a digester to read the XML input file - Digester digester = new Digester(); - try { - digester.setFeature( - "http://apache.org/xml/features/allow-java-encodings", true); + // Parse the XML input to load this database + digester.parse(resource.getInputStream()); + } catch (IOException ioe) { + log.error(sm.getString("memoryUserDatabase.fileNotFound", pathName)); } catch (Exception e) { - log.warn(sm.getString("memoryUserDatabase.xmlFeatureEncoding"), e); + // Fail safe on error + users.clear(); + groups.clear(); + roles.clear(); + throw e; } - digester.addFactoryCreate("tomcat-users/group", - new MemoryGroupCreationFactory(this), true); - digester.addFactoryCreate("tomcat-users/role", - new MemoryRoleCreationFactory(this), true); - digester.addFactoryCreate("tomcat-users/user", - new MemoryUserCreationFactory(this), true); - - // Parse the XML input to load this database - digester.parse(resource.getInputStream()); - } catch (IOException ioe) { - log.error(sm.getString("memoryUserDatabase.fileNotFound", pathName)); - } catch (Exception e) { - // Fail safe on error - users.clear(); - groups.clear(); - roles.clear(); - throw e; } finally { writeLock.unlock(); } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org