futures: fix behaviour when executors don't exec callback
Summary: When future callbacks are to be executed by an executor (via `via`) and the executor does not actually execute the callback function (for whatever reason), then waiting for the final future (the one returned by `via`) block forever. In case the callback function that got passed to the executor gets destroyed without being executed, the future should be set to a folly::BrokenPromise exception instead of remaining unset forever. This diff modifies the reference counting in folly::detail::Core to make sure the reference held by the callback function is properly removed not only after the callback gets executed, but also when the callback is destroyed without having been executed. Reviewed By: yfeldblum Differential Revision: D3455931 fbshipit-source-id: debb6f3563384a658d1e0149a4aadbbcb268938c
Showing
Please register or sign in to comment