diff options
author | shreyax <shreyax@google.com> | 2018-04-05 11:46:08 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-04-05 11:49:01 -0700 |
commit | bd64f605435ed71a685ef2b2685425ff3e1cb8e4 (patch) | |
tree | d136a5e99458ef33ee422657d6906aa4c137f843 /src/main/java/com/google/devtools/build/lib/query2 | |
parent | 8426bc57d10aa07f6bebd4491a652240b0f645ad (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.java | 3 |
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( |