From 1e2bd9c5745f7ae1abe583498fd8fcd01cf367ba Mon Sep 17 00:00:00 2001 From: Lisa Date: Fri, 24 Nov 2023 09:09:03 +0100 Subject: [PATCH] adding lock for waypoints --- .../sap/sailing/gwt/ui/server/SailingServiceImpl.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index ebc3d676544..60619c79242 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -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(); } }