Commit b18832a6 authored by Pranav Thulasiram Bhat's avatar Pranav Thulasiram Bhat Committed by Facebook GitHub Bot

Mark lambdas in addFiber(Future) mutable

Summary:
If `func` is mutable, then the lambda applying `init_await` must be mutable too in order to call `func`'s non-const () operator.

This diff marks the `init_await` applying lambdas mutable.

Reviewed By: yfeldblum

Differential Revision: D22238824

fbshipit-source-id: 20f202b121edd0bdfcf7a6f707a4f1d4df0181d8
parent df460658
......@@ -33,7 +33,7 @@ namespace detail {
template <typename F>
auto addFiberFuture(F&& func, FiberManager& fm) {
return fm.addTaskFuture(
[func = std::forward<F>(func)] { return init_await(func()); });
[func = std::forward<F>(func)]() mutable { return init_await(func()); });
}
} // namespace detail
......@@ -42,7 +42,8 @@ auto addFiberFuture(F&& func, FiberManager& fm) {
*/
template <typename F>
void addFiber(F&& func, FiberManager& fm) {
fm.addTask([func = std::forward<F>(func)] { return init_await(func()); });
fm.addTask(
[func = std::forward<F>(func)]() mutable { return init_await(func()); });
}
} // namespace async
} // namespace fibers
......
......@@ -256,6 +256,14 @@ TEST(FiberManager, asyncFiberManager) {
getFiberManager(evb))
.getVia(&evb);
EXPECT_TRUE(completed);
size_t count = 0;
EXPECT_EQ(
1,
async::detail::addFiberFuture(
[count]() mutable -> async::Async<int> { return ++count; },
getFiberManager(evb))
.getVia(&evb));
}
{
......
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