]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/context/src/execution_context.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / context / src / execution_context.cpp
CommitLineData
7c673cae
FG
1
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)
6
7#include "boost/context/execution_context.hpp"
8
9#include <boost/config.hpp>
10
11#ifdef BOOST_HAS_ABI_HEADERS
12# include BOOST_ABI_PREFIX
13#endif
14
b32b8144 15#if (defined(BOOST_EXECUTION_CONTEXT) && (BOOST_EXECUTION_CONTEXT == 1))
7c673cae
FG
16namespace boost {
17namespace context {
18namespace detail {
19
20thread_local
21activation_record::ptr_t
22activation_record::current_rec;
23
24// zero-initialization
25thread_local static std::size_t counter;
26
27// schwarz counter
28activation_record_initializer::activation_record_initializer() noexcept {
29 if ( 0 == counter++) {
30 activation_record::current_rec.reset( new activation_record() );
31 }
32}
33
34activation_record_initializer::~activation_record_initializer() {
35 if ( 0 == --counter) {
36 BOOST_ASSERT( activation_record::current_rec->is_main_context() );
37 delete activation_record::current_rec.detach();
38 }
39}
40
41}
42
43execution_context
44execution_context::current() noexcept {
45 // initialized the first time control passes; per thread
46 thread_local static detail::activation_record_initializer initializer;
47 return execution_context();
48}
49
50}}
7c673cae
FG
51#endif
52
b32b8144
FG
53#ifdef BOOST_HAS_ABI_HEADERS
54# include BOOST_ABI_SUFFIX
55#endif