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