Author: angela
Date: Wed Mar 15 16:38:19 2017
New Revision: 1787077

URL: http://svn.apache.org/viewvc?rev=1787077&view=rev
Log:
OAK-5939 : MembershipWriter.removeMembers writes back too often

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipWriter.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipWriter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipWriter.java?rev=1787077&r1=1787076&r2=1787077&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipWriter.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipWriter.java
 Wed Mar 15 16:38:19 2017
@@ -214,23 +214,23 @@ public class MembershipWriter {
             PropertyState refs = t.getProperty(UserConstants.REP_MEMBERS);
             if (refs != null) {
                 PropertyBuilder<String> prop = 
PropertyBuilder.copy(Type.WEAKREFERENCE, refs);
-                Iterator<Map.Entry<String,String>> memberEntries = 
memberIds.entrySet().iterator();
-                while (memberEntries.hasNext()) {
-                    String memberContentId = memberEntries.next().getKey();
+                Iterator<Map.Entry<String,String>> it = 
memberIds.entrySet().iterator();
+                while (it.hasNext() && !prop.isEmpty()) {
+                    String memberContentId = it.next().getKey();
                     if (prop.hasValue(memberContentId)) {
                         prop.removeValue(memberContentId);
-                        if (prop.isEmpty()) {
-                            if (t == groupTree) {
-                                t.removeProperty(UserConstants.REP_MEMBERS);
-                            } else {
-                                t.remove();
-                            }
-                        } else {
-                            t.setProperty(prop.getPropertyState());
-                        }
-                        memberEntries.remove();
+                        it.remove();
                     }
                 }
+                if (prop.isEmpty()) {
+                    if (t == groupTree) {
+                        t.removeProperty(UserConstants.REP_MEMBERS);
+                    } else {
+                        t.remove();
+                    }
+                } else {
+                    t.setProperty(prop.getPropertyState());
+                }
             }
         }
         return Sets.newHashSet(memberIds.values());


Reply via email to