You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2006/03/27 14:55:39 UTC

svn commit: r389129 - /jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java

Author: stefan
Date: Mon Mar 27 04:55:36 2006
New Revision: 389129

URL: http://svn.apache.org/viewcvs?rev=389129&view=rev
Log:
fixed potential NoSuchElementException in RepositoryImpl.shutdown()

Modified:
    jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java

Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
URL: http://svn.apache.org/viewcvs/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java?rev=389129&r1=389128&r2=389129&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java Mon Mar 27 04:55:36 2006
@@ -843,9 +843,19 @@
         log.info("Shutting down repository...");
 
         // close active user sessions
-        while (!activeSessions.isEmpty()) {
-           ((Session) activeSessions.values().iterator().next()).logout();
-       }
+        // (copy sessions to array to avoid ConcurrentModificationException;
+        // manually copy entries rather than calling ReferenceMap#toArray() in
+        // order to work around  http://issues.apache.org/bugzilla/show_bug.cgi?id=25551)
+        int cnt = 0;
+        SessionImpl[] sa = new SessionImpl[activeSessions.size()];
+        for (Iterator it = activeSessions.values().iterator(); it.hasNext(); cnt++) {
+            sa[cnt] = (SessionImpl) it.next();
+        }
+        for (int i = 0; i < sa.length; i++) {
+            if (sa[i] != null) {
+                sa[i].logout();
+            }
+        }
 
         // shut down workspaces
         for (Iterator it = wspInfos.values().iterator(); it.hasNext();) {