aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/restricted/boost/libs/context/src/execution_context.cpp
diff options
context:
space:
mode:
authorDaniil Cherednik <dan.cherednik@gmail.com>2022-09-21 20:17:38 +0300
committerDaniil Cherednik <dan.cherednik@gmail.com>2022-09-21 20:17:38 +0300
commite6c9b17192c56494adba359d5e132c431b241191 (patch)
tree6f2449871a118a0e8919ce842b1174e06cb470ef /contrib/restricted/boost/libs/context/src/execution_context.cpp
parent285021ab1aac39e84b269d9bacd4deee69cf63fc (diff)
downloadydb-e6c9b17192c56494adba359d5e132c431b241191.tar.gz
Ydb stable 22-4-2122.4.21
x-stable-origin-commit: e89099581237299a132feafb5b58af59ebd0468a
Diffstat (limited to 'contrib/restricted/boost/libs/context/src/execution_context.cpp')
-rw-r--r--contrib/restricted/boost/libs/context/src/execution_context.cpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/contrib/restricted/boost/libs/context/src/execution_context.cpp b/contrib/restricted/boost/libs/context/src/execution_context.cpp
new file mode 100644
index 0000000000..fc593ecb03
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/execution_context.cpp
@@ -0,0 +1,69 @@
+
+// Copyright Oliver Kowalke 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include "boost/context/detail/config.hpp"
+
+#if ! defined(BOOST_CONTEXT_NO_CXX11)
+
+#include "boost/context/execution_context.hpp"
+#include <boost/config.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace context {
+
+#if !defined(BOOST_NO_CXX11_THREAD_LOCAL)
+
+namespace detail {
+
+ecv1_activation_record::ptr_t &
+ecv1_activation_record::current() noexcept {
+ thread_local static ptr_t current;
+ return current;
+}
+
+// zero-initialization
+thread_local static std::size_t counter;
+
+// schwarz counter
+ecv1_activation_record_initializer::ecv1_activation_record_initializer() noexcept {
+ if ( 0 == counter++) {
+ ecv1_activation_record::current().reset( new ecv1_activation_record() );
+ }
+}
+
+ecv1_activation_record_initializer::~ecv1_activation_record_initializer() {
+ if ( 0 == --counter) {
+ BOOST_ASSERT( ecv1_activation_record::current()->is_main_context() );
+ delete ecv1_activation_record::current().detach();
+ }
+}
+
+}
+
+namespace v1 {
+
+execution_context
+execution_context::current() noexcept {
+ // initialized the first time control passes; per thread
+ thread_local static detail::ecv1_activation_record_initializer initializer;
+ return execution_context();
+}
+
+}
+
+#endif
+
+}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif