Bill Burcham created GEODE-8195:
-----------------------------------

             Summary: ConcurrentModificationException from 
LocatorMembershipListenerImpl$DistributeLocatorsRunnable.run
                 Key: GEODE-8195
                 URL: https://issues.apache.org/jira/browse/GEODE-8195
             Project: Geode
          Issue Type: Bug
          Components: membership
            Reporter: Bill Burcham


this code:

{code}
            Set<LocatorJoinMessage> joinMessages = entry.getValue();

            for (LocatorJoinMessage locatorJoinMessage : joinMessages) {
              if (retryMessage(targetLocator, locatorJoinMessage, attempt)) {
                joinMessages.remove(locatorJoinMessage);
              } else {
{code}

modifies the {{joinMessages}} set as it is iterating over the set, resulting in 
a {{ConcurrentModificationException}}.

Here is a scratch file that illustrates the issue:

{code}
import java.util.HashSet;
import java.util.Set;

class Scratch {
  public static void main(String[] args) {
    final Set<String> joinMessages = new HashSet<>();

    joinMessages.add("one");
    joinMessages.add("two");

    for( final String entry:joinMessages ) {
      if (entry.equals("one"))
        joinMessages.remove(entry);
    }

  }
}
{code}

>From looking at the Geode code, {{joinMessages}} is not used outside the loop 
>so there is no need to modify it at all—I think we can simply remove this line:

{code}
                joinMessages.remove(locatorJoinMessage);
{code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to