diff --git a/src/thread.cpp b/src/thread.cpp index a7d3811b..a7edcca9 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -94,6 +94,18 @@ public: bool m_started; }; +#if defined(BOOST_HAS_WINTHREADS) + +struct on_thread_exit_guard +{ + ~on_thread_exit_guard() + { + on_thread_exit(); + } +}; + +#endif + } // unnamed namespace extern "C" { @@ -107,13 +119,16 @@ extern "C" { { // try { +#if defined(BOOST_HAS_WINTHREADS) + + on_thread_exit_guard guard; + +#endif + thread_param* p = static_cast(param); boost::function0 threadfunc = p->m_threadfunc; p->started(); threadfunc(); -#if defined(BOOST_HAS_WINTHREADS) - on_thread_exit(); -#endif } // catch (...) // {