diff --git a/include/chaiscript/chaiscript_defines.hpp b/include/chaiscript/chaiscript_defines.hpp index 1b340cb..553ff54 100644 --- a/include/chaiscript/chaiscript_defines.hpp +++ b/include/chaiscript/chaiscript_defines.hpp @@ -51,8 +51,7 @@ #endif #endif - -#if (defined(__GNUC__) && __GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) || (defined(__llvm__) && !defined(CHAISCRIPT_LIBCPP)) +#if (defined(CHAISCRIPT_MSVC) && !defined(CHAISCRIPT_MSVC_12)) || (defined(__GNUC__) && __GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) || (defined(__llvm__) && !defined(CHAISCRIPT_LIBCPP)) /// Currently only g++>=4.8 supports this natively /// \todo Make this support other compilers when possible #define CHAISCRIPT_HAS_THREAD_LOCAL diff --git a/include/chaiscript/chaiscript_stdlib.hpp b/include/chaiscript/chaiscript_stdlib.hpp index 84797b7..4b38f2c 100644 --- a/include/chaiscript/chaiscript_stdlib.hpp +++ b/include/chaiscript/chaiscript_stdlib.hpp @@ -49,13 +49,7 @@ namespace chaiscript #ifndef CHAISCRIPT_NO_THREADS lib->add(standard_library::future_type>("future")); -#ifdef CHAISCRIPT_MSVC - /// this is to work around an issue that seems to only come up on single CPU hosts on MSVC 2015 Update 1 - /// \todo reevaluate this later - lib->add(chaiscript::fun([](const std::function &t_func){ return std::async(std::thread::hardware_concurrency() <= 1 ? std::launch::deferred : std::launch::async, t_func);}), "async"); -#else lib->add(chaiscript::fun([](const std::function &t_func){ return std::async(std::launch::async, t_func);}), "async"); -#endif #endif lib->add(json_wrap::library()); diff --git a/include/chaiscript/chaiscript_threading.hpp b/include/chaiscript/chaiscript_threading.hpp index 09fc617..0bb3cfd 100644 --- a/include/chaiscript/chaiscript_threading.hpp +++ b/include/chaiscript/chaiscript_threading.hpp @@ -160,13 +160,14 @@ namespace chaiscript { unique_lock lock(m_mutex); - auto itr = m_instances.find(std::this_thread::get_id()); + const auto id = std::this_thread::get_id(); + auto itr = m_instances.find(id); if (itr != m_instances.end()) { return itr->second; } std::shared_ptr new_instance(std::make_shared()); - m_instances.insert(std::make_pair(std::this_thread::get_id(), new_instance)); + m_instances.insert(std::make_pair(id, new_instance)); return new_instance; }