mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-05 03:43:52 +00:00
try to avoid deadlock
This commit is contained in:
1 parent
957cb5738a
commit
5394740bd9
2 files changed
+29
-6
No files matched your search
+23
-4
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+6
-2
@@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user