Commit 7ab42fa8 authored by Alexander Shaposhnikov's avatar Alexander Shaposhnikov Committed by facebook-github-bot-9

Revert my change (which broke down the cont build)

Summary: hg backout -r c9f7b5f3185a
Revert my change (which broke down the cont build t9048692)

Reviewed By: djwatson

Differential Revision: D2640797

fb-gh-sync-id: 51f196ac5a3560fde4dc8fe7bb6ef278d74136e5
parent 52b003af
...@@ -936,8 +936,18 @@ void waitImpl(Future<T>& f) { ...@@ -936,8 +936,18 @@ void waitImpl(Future<T>& f) {
if (f.isReady()) return; if (f.isReady()) return;
folly::fibers::Baton baton; folly::fibers::Baton baton;
f.setCallback_([&](const Try<T>& t) { baton.post(); }); f = f.then([&](Try<T> t) {
baton.post();
return makeFuture(std::move(t));
});
baton.wait(); baton.wait();
// There's a race here between the return here and the actual finishing of
// the future. f is completed, but the setup may not have finished on done
// after the baton has posted.
while (!f.isReady()) {
std::this_thread::yield();
}
} }
template <class T> template <class T>
...@@ -946,10 +956,19 @@ void waitImpl(Future<T>& f, Duration dur) { ...@@ -946,10 +956,19 @@ void waitImpl(Future<T>& f, Duration dur) {
if (f.isReady()) return; if (f.isReady()) return;
auto baton = std::make_shared<folly::fibers::Baton>(); auto baton = std::make_shared<folly::fibers::Baton>();
f.setCallback_([baton](const Try<T>& t) { f = f.then([baton](Try<T> t) {
baton->post(); baton->post();
return makeFuture(std::move(t));
}); });
baton->timed_wait(dur);
// Let's preserve the invariant that if we did not timeout (timed_wait returns
// true), then the returned Future is complete when it is returned to the
// caller. We need to wait out the race for that Future to complete.
if (baton->timed_wait(dur)) {
while (!f.isReady()) {
std::this_thread::yield();
}
}
} }
template <class T> template <class T>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment