Ticket #7875 (closed Bugs: fixed)
BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED should not be enabled by default
|Reported by:||Andrew Molyneux <andrew.molyneux@…>||Owned by:||viboes|
I just upgraded to Boost 1.52 on Windows using pre-built binaries and encountered a problem. Because BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED is enabled by default, any code that uses thread::join() will throw an exception if the target thread has already finished executing. Fortunately this was picked up by our unit tests, but the new behaviour could lead to intermittent race condition bugs that could be difficult to track down.
I've attached a patch (to be applied in libs/thread/build) which comments out the BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED defines in the jamfile. Failing that, could someone please explain to me why this feature is enabled by default? It seems like a recipe for disaster. For example, the fix for ticket #7668, which is attempting to work around a bug introduced by this feature, seems to introduce a race condition.
- Owner changed from anthonyw to viboes
- Status changed from new to assigned