Index: win32/thread.cpp =================================================================== --- win32/thread.cpp (revision 61846) +++ win32/thread.cpp (working copy) @@ -163,13 +163,17 @@ { detail::thread_data_base* const thread_info(reinterpret_cast(param)); set_current_thread_data(thread_info); +#ifndef BOOST_NO_EXCEPTIONS try +#endif { thread_info->run(); } +#ifndef BOOST_NO_EXCEPTIONS catch(thread_interrupted const&) { } +#endif // Removed as it stops the debugger identifying the cause of the exception // Unhandled exceptions still cause the application to terminate // catch(...) Index: win32/tss_pe.cpp =================================================================== --- win32/tss_pe.cpp (revision 61846) +++ win32/tss_pe.cpp (working copy) @@ -83,7 +83,10 @@ #include + #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN + #endif + #include //Definitions required by implementation Index: pthread/thread.cpp =================================================================== --- pthread/thread.cpp (revision 61846) +++ pthread/thread.cpp (working copy) @@ -116,6 +116,9 @@ boost::detail::thread_data_ptr thread_info = static_cast(param)->self; thread_info->self.reset(); detail::set_current_thread_data(thread_info.get()); +#ifdef BOOST_NO_EXCEPTIONS + thread_info->run(); +#else try { thread_info->run(); @@ -129,6 +132,7 @@ // { // std::terminate(); // } +#endif detail::tls_destructor(thread_info.get()); detail::set_current_thread_data(0); @@ -462,6 +466,7 @@ void interruption_point() { +#ifndef BOOST_NO_EXCEPTIONS boost::detail::thread_data_base* const thread_info=detail::get_current_thread_data(); if(thread_info && thread_info->interrupt_enabled) { @@ -472,6 +477,7 @@ throw thread_interrupted(); } } +#endif } bool interruption_enabled()