2 // Copyright Oliver Kowalke 2009.
3 // Distributed under the Boost Software License, Version 1.0.
4 // (See accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
7 #include "boost/context/execution_context.hpp"
9 #include <boost/config.hpp>
11 #ifdef BOOST_HAS_ABI_HEADERS
12 # include BOOST_ABI_PREFIX
15 #if ! defined(BOOST_CONTEXT_NO_CXX11)
16 # if (defined(BOOST_EXECUTION_CONTEXT) && (BOOST_EXECUTION_CONTEXT == 1))
22 activation_record::ptr_t
23 activation_record::current_rec
;
25 // zero-initialization
26 thread_local
static std::size_t counter
;
29 activation_record_initializer::activation_record_initializer() noexcept
{
30 if ( 0 == counter
++) {
31 activation_record::current_rec
.reset( new activation_record() );
35 activation_record_initializer::~activation_record_initializer() {
36 if ( 0 == --counter
) {
37 BOOST_ASSERT( activation_record::current_rec
->is_main_context() );
38 delete activation_record::current_rec
.detach();
45 execution_context::current() noexcept
{
46 // initialized the first time control passes; per thread
47 thread_local
static detail::activation_record_initializer initializer
;
48 return execution_context();
55 # ifdef BOOST_HAS_ABI_HEADERS
56 # include BOOST_ABI_SUFFIX