diff --git a/include/boost/fiber/fiber.hpp b/include/boost/fiber/fiber.hpp index d6d32296..7c1ac587 100644 --- a/include/boost/fiber/fiber.hpp +++ b/include/boost/fiber/fiber.hpp @@ -361,8 +361,7 @@ public: void priority( int) BOOST_NOEXCEPT; - void detach() BOOST_NOEXCEPT - { impl_.reset(); } + void detach() BOOST_NOEXCEPT; void join(); diff --git a/src/fiber.cpp b/src/fiber.cpp index e6d1914e..f7f4243c 100644 --- a/src/fiber.cpp +++ b/src/fiber.cpp @@ -69,6 +69,21 @@ fiber::join() impl_.reset(); } +void +fiber::detach() BOOST_NOEXCEPT +{ + BOOST_ASSERT( impl_); + + if ( ! joinable() ) + { + boost::throw_exception( + fiber_resource_error( + system::errc::invalid_argument, "boost fiber: fiber not joinable") ); + } + + impl_.reset(); +} + void fiber::interrupt() BOOST_NOEXCEPT {