try to avoid deadlock

This commit is contained in:
Axel Uhl committed 2012-06-18 17:00:20 +02:00
1 parent 957cb5738a
commit 5394740bd9
2 files changed
+29 -6

No files matched your search

@@ -15,6 +15,7 @@ import com.sap.sailing.domain.common.NoWindException;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.tracking.TrackedRace;
/**
* Compares two competitors that occur in a {@link Leaderboard#getCompetitors()} set in the context of the
@@ -55,11 +56,29 @@ public class LeaderboardTotalRankComparator implements Comparator<Competitor> {
this.leaderboard = leaderboard;
this.scoreComparator = scoreComparator;
totalPointsCache = new HashMap<Pair<Competitor, RaceColumn>, Integer>();
for (final RaceColumn raceColumn : leaderboard.getRaceColumns()) {
Iterator<? extends Fleet> fleet = raceColumn.getFleets().iterator();
cacheTotalPointsWithLockedTrackedRaceForFleet(fleet, leaderboard, raceColumn, timePoint);
}
}
private void cacheTotalPointsWithLockedTrackedRaceForFleet(Iterator<? extends Fleet> fleetIter,
Leaderboard leaderboard, RaceColumn raceColumn, TimePoint timePoint) throws NoWindException {
if (fleetIter.hasNext()) {
Fleet fleet = fleetIter.next();
TrackedRace trackedRace = raceColumn.getTrackedRace(fleet);
if (trackedRace != null)
;
} else {
cacheTotalPoints(leaderboard, raceColumn, timePoint);
}
}
private void cacheTotalPoints(Leaderboard leaderboard, final RaceColumn raceColumn, TimePoint timePoint)
throws NoWindException {
for (Competitor competitor : leaderboard.getCompetitors()) {
for (RaceColumn raceColumn : leaderboard.getRaceColumns()) {
totalPointsCache.put(new Pair<Competitor, RaceColumn>(competitor, raceColumn),
leaderboard.getTotalPoints(competitor, raceColumn, timePoint));
}
totalPointsCache.put(new Pair<Competitor, RaceColumn>(competitor, raceColumn),
leaderboard.getTotalPoints(competitor, raceColumn, timePoint));
}
}
@@ -1659,8 +1659,12 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
@Override
public Iterable<WindSource> getWindSources() {
synchronized (windTracks) {
return new ArrayList<WindSource>(windTracks.keySet());
while (true) {
try {
return new ArrayList<WindSource>(windTracks.keySet());
} catch (ConcurrentModificationException cme) {
logger.info("Caught "+cme+"; trying again");
}
}
}