16e38d5685
This class is using a map to store the memberOf and can be accessed by multiple threads concurrently. The map was not synchronized which was causing an infinite loop under very specific sequence of events. Here is a snippet of the thread dump when that problem happened: "SSH gerrit review ..." prio=1 RUNNABLE java.util.HashMap.getEntry(HashMap.java:446) java.util.HashMap.get(HashMap.java:405) com.google.gerrit.server.account.IncludingGroupMembership.containsAnyOf(IncludingGroupMembership.java:77) com.google.gerrit.server.account.UniversalGroupBackend$UniversalGroupMembership.containsAnyOf(UniversalGroupBackend.java:152) com.google.gerrit.server.account.IncludingGroupMembership.search(IncludingGroupMembership.java:115) com.google.gerrit.server.account.IncludingGroupMembership.containsAnyOf(IncludingGroupMembership.java:93) com.google.gerrit.server.account.IncludingGroupMembership.contains(IncludingGroupMembership.java:69) com.google.gerrit.server.account.UniversalGroupBackend$UniversalGroupMembership.contains(UniversalGroupBackend.java:129) com.google.gerrit.server.project.ProjectControl.match(ProjectControl.java:493) Change the HashMap to a ConcurrentHashMap to handle concurrent access. Change-Id: I36f654281b7a1d7126936d86d64e6827d8987577 |
||
---|---|---|
.. | ||
src | ||
BUCK |