Commit ddcb6ea2 authored by Yedidya Feldblum's avatar Yedidya Feldblum Committed by Facebook GitHub Bot

Drop support for boost below 1.61

Summary: [Folly] Drop support for boost below 1.61, which means removing multiple versions of support for `boost-context` embedded in `folly/fibers/`.

Reviewed By: fredemmott

Differential Revision: D22779795

fbshipit-source-id: fafc9b38784dcb206283e11d01d77dd8655354a6
parent afdcebcc
......@@ -16,23 +16,12 @@
#pragma once
#include <boost/version.hpp>
#if BOOST_VERSION >= 106100
#include <boost/context/detail/fcontext.hpp>
#else
#include <boost/context/fcontext.hpp>
#endif
#include <glog/logging.h>
/**
* Wrappers for different versions of boost::context library
* API reference for different versions
* Boost 1.51:
* http://www.boost.org/doc/libs/1_51_0/libs/context/doc/html/context/context/boost_fcontext.html
* Boost 1.52:
* http://www.boost.org/doc/libs/1_52_0/libs/context/doc/html/context/context/boost_fcontext.html
* Boost 1.56:
* http://www.boost.org/doc/libs/1_56_0/libs/context/doc/html/context/context/boost_fcontext.html
* Boost 1.61:
* https://github.com/boostorg/context/blob/boost-1.61.0/include/boost/context/detail/fcontext.hpp
*/
......@@ -43,25 +32,9 @@ namespace folly {
namespace fibers {
class FiberImpl {
#if BOOST_VERSION >= 106100
using FiberContext = boost::context::detail::fcontext_t;
#elif BOOST_VERSION >= 105600
using FiberContext = boost::context::fcontext_t;
#elif BOOST_VERSION >= 105200
using FiberContext = boost::context::fcontext_t*;
#else
using FiberContext = boost::ctx::fcontext_t;
#endif
#if BOOST_VERSION >= 106100
using MainContext = boost::context::detail::fcontext_t;
#elif BOOST_VERSION >= 105600
using MainContext = boost::context::fcontext_t;
#elif BOOST_VERSION >= 105200
using MainContext = boost::context::fcontext_t;
#else
using MainContext = boost::ctx::fcontext_t;
#endif
public:
FiberImpl(
......@@ -70,56 +43,28 @@ class FiberImpl {
size_t stackSize)
: func_(std::move(func)) {
auto stackBase = stackLimit + stackSize;
#if BOOST_VERSION >= 106100
stackBase_ = stackBase;
fiberContext_ =
boost::context::detail::make_fcontext(stackBase, stackSize, &fiberFunc);
#elif BOOST_VERSION >= 105200
fiberContext_ =
boost::context::make_fcontext(stackBase, stackSize, &fiberFunc);
#else
fiberContext_.fc_stack.limit = stackLimit;
fiberContext_.fc_stack.base = stackBase;
make_fcontext(&fiberContext_, &fiberFunc);
#endif
}
void activate() {
#if BOOST_VERSION >= 106100
auto transfer = boost::context::detail::jump_fcontext(fiberContext_, this);
fiberContext_ = transfer.fctx;
auto context = reinterpret_cast<intptr_t>(transfer.data);
#elif BOOST_VERSION >= 105200
auto context = boost::context::jump_fcontext(
&mainContext_, fiberContext_, reinterpret_cast<intptr_t>(this));
#else
auto context = jump_fcontext(
&mainContext_, &fiberContext_, reinterpret_cast<intptr_t>(this));
#endif
DCHECK_EQ(0, context);
}
void deactivate() {
#if BOOST_VERSION >= 106100
auto transfer =
boost::context::detail::jump_fcontext(mainContext_, nullptr);
mainContext_ = transfer.fctx;
fixStackUnwinding();
auto context = reinterpret_cast<intptr_t>(transfer.data);
#elif BOOST_VERSION >= 105600
auto context =
boost::context::jump_fcontext(&fiberContext_, mainContext_, 0);
#elif BOOST_VERSION >= 105200
auto context =
boost::context::jump_fcontext(fiberContext_, &mainContext_, 0);
#else
auto context = jump_fcontext(&fiberContext_, &mainContext_, 0);
#endif
DCHECK_EQ(this, reinterpret_cast<FiberImpl*>(context));
}
private:
#if BOOST_VERSION >= 106100
static void fiberFunc(boost::context::detail::transfer_t transfer) {
auto fiberImpl = reinterpret_cast<FiberImpl*>(transfer.data);
fiberImpl->mainContext_ = transfer.fctx;
......@@ -139,13 +84,6 @@ class FiberImpl {
}
unsigned char* stackBase_;
#else
static void fiberFunc(intptr_t arg) {
auto fiberImpl = reinterpret_cast<FiberImpl*>(arg);
fiberImpl->func_();
}
#endif
folly::Function<void()> func_;
FiberContext fiberContext_;
MainContext mainContext_;
......
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