Updates from BitShares FC #22

Closed
nathanielhourt wants to merge 693 commits from dapp-support into latest-fc
2 changed files with 5 additions and 65 deletions
Showing only changes of commit dd257e5c0b - Show all commits

View file

@ -19,11 +19,11 @@
namespace bc = boost::context::detail; namespace bc = boost::context::detail;
namespace bco = boost::coroutines; namespace bco = boost::coroutines;
typedef bco::stack_allocator stack_allocator; typedef bco::stack_allocator stack_allocator;
#elif BOOST_VERSION >= 105400 #else
# include <boost/coroutine/stack_context.hpp> # include <boost/coroutine/stack_context.hpp>
namespace bc = boost::context; namespace bc = boost::context;
namespace bco = boost::coroutines; namespace bco = boost::coroutines;
# if BOOST_VERSION >= 105600 && !defined(NDEBUG) # if !defined(NDEBUG)
# include <boost/assert.hpp> # include <boost/assert.hpp>
# include <boost/coroutine/protected_stack_allocator.hpp> # include <boost/coroutine/protected_stack_allocator.hpp>
typedef bco::protected_stack_allocator stack_allocator; typedef bco::protected_stack_allocator stack_allocator;
@ -32,16 +32,7 @@
typedef bco::stack_allocator stack_allocator; typedef bco::stack_allocator stack_allocator;
# endif # endif
#elif BOOST_VERSION >= 105300 #endif // BOOST_VERSION >= 106100
#include <boost/coroutine/stack_allocator.hpp>
namespace bc = boost::context;
namespace bco = boost::coroutines;
#elif BOOST_VERSION >= 105200
namespace bc = boost::context;
#else
namespace bc = boost::ctx;
namespace bco = boost::coroutine;
#endif
namespace fc { namespace fc {
class thread; class thread;
@ -55,10 +46,7 @@ namespace fc {
*/ */
struct context { struct context {
typedef fc::context* ptr; typedef fc::context* ptr;
#if BOOST_VERSION >= 105400
bco::stack_context stack_ctx; bco::stack_context stack_ctx;
#endif
#if BOOST_VERSION >= 106100 #if BOOST_VERSION >= 106100
using context_fn = void (*)(bc::transfer_t); using context_fn = void (*)(bc::transfer_t);
@ -81,32 +69,13 @@ namespace fc {
cur_task(0), cur_task(0),
context_posted_num(0) context_posted_num(0)
{ {
#if BOOST_VERSION >= 105600
size_t stack_size = FC_CONTEXT_STACK_SIZE; size_t stack_size = FC_CONTEXT_STACK_SIZE;
alloc.allocate(stack_ctx, stack_size); alloc.allocate(stack_ctx, stack_size);
my_context = bc::make_fcontext( stack_ctx.sp, stack_ctx.size, sf); my_context = bc::make_fcontext( stack_ctx.sp, stack_ctx.size, sf);
#elif BOOST_VERSION >= 105400
size_t stack_size = FC_CONTEXT_STACK_SIZE;
alloc.allocate(stack_ctx, stack_size);
my_context = bc::make_fcontext( stack_ctx.sp, stack_ctx.size, sf);
#elif BOOST_VERSION >= 105300
size_t stack_size = FC_CONTEXT_STACK_SIZE;
void* stackptr = alloc.allocate(stack_size);
my_context = bc::make_fcontext( stackptr, stack_size, sf);
#else
size_t stack_size = FC_CONTEXT_STACK_SIZE;
my_context.fc_stack.base = alloc.allocate( stack_size );
my_context.fc_stack.limit = static_cast<char*>( my_context.fc_stack.base) - stack_size;
make_fcontext( &my_context, sf );
#endif
} }
context( fc::thread* t) : context( fc::thread* t) :
#if BOOST_VERSION >= 105600
my_context(nullptr), my_context(nullptr),
#elif BOOST_VERSION >= 105300
my_context(new bc::fcontext_t),
#endif
caller_context(0), caller_context(0),
stack_alloc(0), stack_alloc(0),
next_blocked(0), next_blocked(0),
@ -123,23 +92,8 @@ namespace fc {
{} {}
~context() { ~context() {
#if BOOST_VERSION >= 105600
if(stack_alloc) if(stack_alloc)
stack_alloc->deallocate( stack_ctx ); stack_alloc->deallocate( stack_ctx );
#elif BOOST_VERSION >= 105400
if(stack_alloc)
stack_alloc->deallocate( stack_ctx );
else
delete my_context;
#elif BOOST_VERSION >= 105300
if(stack_alloc)
stack_alloc->deallocate( my_context->fc_stack.sp, FC_CONTEXT_STACK_SIZE);
else
delete my_context;
#else
if(stack_alloc)
stack_alloc->deallocate( my_context.fc_stack.base, FC_CONTEXT_STACK_SIZE );
#endif
} }
void reinitialize() void reinitialize()
@ -225,13 +179,7 @@ namespace fc {
bool is_complete()const { return complete; } bool is_complete()const { return complete; }
#if BOOST_VERSION >= 105300 && BOOST_VERSION < 105600
bc::fcontext_t* my_context;
#else
bc::fcontext_t my_context; bc::fcontext_t my_context;
#endif
fc::context* caller_context; fc::context* caller_context;
stack_allocator* stack_alloc; stack_allocator* stack_alloc;
priority prio; priority prio;

View file

@ -433,12 +433,8 @@ namespace fc {
auto p = context_pair{nullptr, prev}; auto p = context_pair{nullptr, prev};
auto t = bc::jump_fcontext( next->my_context, &p ); auto t = bc::jump_fcontext( next->my_context, &p );
static_cast<context_pair*>(t.data)->second->my_context = t.fctx; static_cast<context_pair*>(t.data)->second->my_context = t.fctx;
#elif BOOST_VERSION >= 105600
bc::jump_fcontext( &prev->my_context, next->my_context, 0 );
#elif BOOST_VERSION >= 105300
bc::jump_fcontext( prev->my_context, next->my_context, 0 );
#else #else
bc::jump_fcontext( &prev->my_context, &next->my_context, 0 ); bc::jump_fcontext( &prev->my_context, next->my_context, 0 );
#endif #endif
BOOST_ASSERT( current ); BOOST_ASSERT( current );
BOOST_ASSERT( current == prev ); BOOST_ASSERT( current == prev );
@ -479,12 +475,8 @@ namespace fc {
auto p = context_pair{this, prev}; auto p = context_pair{this, prev};
auto t = bc::jump_fcontext( next->my_context, &p ); auto t = bc::jump_fcontext( next->my_context, &p );
static_cast<context_pair*>(t.data)->second->my_context = t.fctx; static_cast<context_pair*>(t.data)->second->my_context = t.fctx;
#elif BOOST_VERSION >= 105600
bc::jump_fcontext( &prev->my_context, next->my_context, (intptr_t)this );
#elif BOOST_VERSION >= 105300
bc::jump_fcontext( prev->my_context, next->my_context, (intptr_t)this );
#else #else
bc::jump_fcontext( &prev->my_context, &next->my_context, (intptr_t)this ); bc::jump_fcontext( &prev->my_context, next->my_context, (intptr_t)this );
#endif #endif
BOOST_ASSERT( current ); BOOST_ASSERT( current );
BOOST_ASSERT( current == prev ); BOOST_ASSERT( current == prev );