From bd64f605435ed71a685ef2b2685425ff3e1cb8e4 Mon Sep 17 00:00:00 2001 From: shreyax Date: Thu, 5 Apr 2018 11:46:08 -0700 Subject: Fix check-then-act race for some function potentially returning multiple targets. PiperOrigin-RevId: 191774693 --- .../java/com/google/devtools/build/lib/query2/engine/SomeFunction.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/main/java/com/google') diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/SomeFunction.java b/src/main/java/com/google/devtools/build/lib/query2/engine/SomeFunction.java index 4b07a99f07..995e288f29 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/engine/SomeFunction.java +++ b/src/main/java/com/google/devtools/build/lib/query2/engine/SomeFunction.java @@ -64,11 +64,10 @@ class SomeFunction implements QueryFunction { @Override public void process(Iterable partialResult) throws QueryException, InterruptedException { - if (someFound.get() || Iterables.isEmpty(partialResult)) { + if (Iterables.isEmpty(partialResult) || !someFound.compareAndSet(false, true)) { return; } callback.process(ImmutableSet.of(partialResult.iterator().next())); - someFound.set(true); } }); return env.whenSucceedsCall( -- cgit v1.2.3