adding lock for waypoints

This commit is contained in:
Lisa
2023-11-24 09:09:03 +01:00
parent d2fd7ca037
commit 1e2bd9c574
@@ -2573,15 +2573,18 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
TimePoint timePoint, String leaderboardGroupName, UUID leaderboardGroupId, String leaderboardName,
WindLegTypeAndLegBearingAndORCPerformanceCurveCache cache) throws NoWindException {
Double result = null;
Course course = trackedRace.getRace().getCourse();
final Course course = trackedRace.getRace().getCourse();
course.lockForRead(); // make sure the tracked leg survives this call even if a course update is pending
trackedRace.lockForRead(trackedRace.getMarkPassings(competitor));
try {
TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(competitor, timePoint);
final TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(competitor, timePoint);
switch (dataType) {
case LEG_TACKTYPE_LONGTACK_SHORTTACK:
if (trackedLeg != null) {
final TackType tackType = trackedLeg.getTackType(timePoint);
result = (tackType == null) ? null : ((tackType==TackType.LONGTACK) ? 1.0 : 0.0);
result = (tackType == null) ? 0.0 : ((tackType==TackType.LONGTACK) ? 1.0 : -1.0);
} else {
result = 0.0;
}
break;
case RACE_CURRENT_SPEED_OVER_GROUND_IN_KNOTS:
@@ -2949,6 +2952,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
}
return result;
} finally {
trackedRace.unlockAfterRead(trackedRace.getMarkPassings(competitor));
course.unlockAfterRead();
}
}