You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2018/11/21 14:16:18 UTC
svn commit: r1847109 -
/tomcat/trunk/java/org/apache/catalina/users/MemoryUserDatabase.java
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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org