aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/query2
diff options
context:
space:
mode:
authorGravatar shreyax <shreyax@google.com>2018-04-05 11:46:08 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-05 11:49:01 -0700
commitbd64f605435ed71a685ef2b2685425ff3e1cb8e4 (patch)
treed136a5e99458ef33ee422657d6906aa4c137f843 /src/main/java/com/google/devtools/build/lib/query2
parent8426bc57d10aa07f6bebd4491a652240b0f645ad (diff)
Fix check-then-act race for some function potentially returning multiple targets.
PiperOrigin-RevId: 191774693
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/query2')
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/engine/SomeFunction.java3
1 files changed, 1 insertions, 2 deletions
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<T> 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(