fix race in Future::waitWithSemaphore
Summary:
There's a race condition in waitWithSemaphore, specifically because we're
returning a new future that's completed by the input future. As a result,
that future may not be completed by the time waitWithSemaphore returns,
although completion should be imminent.
Test Plan:
`var=0; while true ; do echo $((var++)); _bin/folly/wangle/wangle-test --gtest_filter='Future*' || break ; done`
Before change two runs yielded 303 and 371.
After change I killed the test at 11000.
Reviewed By: njormrod@fb.com
Subscribers: fugalh, njormrod
FB internal diff:
D1561281
Tasks:
5180879