Modification to futures to remove deadlock in certain use cases for getVia(executor).
authorLee Howes <lwh@fb.com>
Mon, 15 Feb 2016 21:22:30 +0000 (13:22 -0800)
committerfacebook-github-bot-0 <folly-bot@fb.com>
Mon, 15 Feb 2016 22:20:24 +0000 (14:20 -0800)
commit030427e249e9257008fa9ccb88c0d996fd04b40f
tree72583adbc8352fe7e15b888175d82b358267f60b
parent753868d5ecf3a89595e4a49a1389e5b2b9dd4b9f
Modification to futures to remove deadlock in certain use cases for getVia(executor).

Summary: If getVia was called on a future modified using via, getVia could deadlock if the original future was updated to a new executor and there was no callback chained after the call to via. In effect: f.via(executor).getVia(executor); deadlocks. This can be a problem if the code is hidden in a library and the precise semantics are unclear. This diff adds a test that exposes the problem and a fix by forcing waitVia to add a callback that will satisfy the new exector, ensuring that drive() has a callback to trigger once the future is satisfied.

Reviewed By: andriigrynenko

Differential Revision: D2906858

fb-gh-sync-id: a3105079530f15d7a7d39a9381c4078665b721a7
shipit-source-id: a3105079530f15d7a7d39a9381c4078665b721a7
folly/futures/Future-inl.h
folly/futures/test/ExecutorTest.cpp