Skip to content

Commit

Permalink
Fix WeakHashMap concurrency issue
Browse files Browse the repository at this point in the history
  • Loading branch information
geofjamg committed Sep 6, 2016
1 parent b62e6f3 commit 579245d
Showing 1 changed file with 14 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import eu.itesla_project.iidm.network.VoltageLevel.NodeBreakerView.SwitchAdder;
import eu.itesla_project.iidm.network.util.ShortIdDictionary;
import gnu.trove.list.array.TIntArrayList;
import org.joda.time.DateTime;
import org.kohsuke.graphviz.Edge;
import org.kohsuke.graphviz.Graph;
import org.kohsuke.graphviz.Node;
Expand All @@ -36,6 +35,8 @@
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
*
Expand Down Expand Up @@ -512,12 +513,20 @@ private static class NumberedBusNamingStrategy implements BusNamingStrategy {

private final Map<VoltageLevel, AtomicInteger> counter = new WeakHashMap<>();

private final Lock lock = new ReentrantLock();

@Override
public String getName(VoltageLevel voltageLevel, TIntArrayList nodes) {
AtomicInteger i = counter.get(voltageLevel);
if (i == null) {
i = new AtomicInteger();
counter.put(voltageLevel, i);
AtomicInteger i;
lock.lock();
try {
i = counter.get(voltageLevel);
if (i == null) {
i = new AtomicInteger();
counter.put(voltageLevel, i);
}
} finally {
lock.unlock();
}
return voltageLevel.getId() + "_" + i.getAndIncrement();
}
Expand Down

0 comments on commit 579245d

Please sign in to comment.