From 524fb56d7e2069046a94ed41c1d125f9c2e5e488 Mon Sep 17 00:00:00 2001 From: Matthew Khouzam Date: Thu, 6 Oct 2016 17:04:09 -0400 Subject: [PATCH] segStore: guard size() in segment stores This prevents a race condition invalidating the size data. Change-Id: I0b5e5c9573dc2789f92d5b437fe23c3df23b9f43 Signed-off-by: Matthew Khouzam Reviewed-on: https://git.eclipse.org/r/82324 Reviewed-by: Genevieve Bastien Reviewed-by: Hudson CI --- .../segmentstore/core/arraylist/ArrayListStore.java | 7 ++++++- .../segmentstore/core/arraylist/LazyArrayListStore.java | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/statesystem/org.eclipse.tracecompass.segmentstore.core/src/org/eclipse/tracecompass/internal/segmentstore/core/arraylist/ArrayListStore.java b/statesystem/org.eclipse.tracecompass.segmentstore.core/src/org/eclipse/tracecompass/internal/segmentstore/core/arraylist/ArrayListStore.java index 6af292cc97..8f166f4075 100644 --- a/statesystem/org.eclipse.tracecompass.segmentstore.core/src/org/eclipse/tracecompass/internal/segmentstore/core/arraylist/ArrayListStore.java +++ b/statesystem/org.eclipse.tracecompass.segmentstore.core/src/org/eclipse/tracecompass/internal/segmentstore/core/arraylist/ArrayListStore.java @@ -126,7 +126,12 @@ public class ArrayListStore<@NonNull E extends ISegment> implements ISegmentStor @Override public int size() { - return fStore.size(); + fLock.readLock().lock(); + try { + return fStore.size(); + } finally { + fLock.readLock().unlock(); + } } @Override diff --git a/statesystem/org.eclipse.tracecompass.segmentstore.core/src/org/eclipse/tracecompass/internal/segmentstore/core/arraylist/LazyArrayListStore.java b/statesystem/org.eclipse.tracecompass.segmentstore.core/src/org/eclipse/tracecompass/internal/segmentstore/core/arraylist/LazyArrayListStore.java index d6e6ea3969..1d6de72ec9 100644 --- a/statesystem/org.eclipse.tracecompass.segmentstore.core/src/org/eclipse/tracecompass/internal/segmentstore/core/arraylist/LazyArrayListStore.java +++ b/statesystem/org.eclipse.tracecompass.segmentstore.core/src/org/eclipse/tracecompass/internal/segmentstore/core/arraylist/LazyArrayListStore.java @@ -150,7 +150,12 @@ public class LazyArrayListStore<@NonNull E extends ISegment> implements ISegment @Override public int size() { - return fStore.size(); + fLock.lock(); + try { + return fStore.size(); + } finally { + fLock.unlock(); + } } @Override -- 2.34.1