- concurrent execute() calls print captured subprocess lines to
std::cout from multiple threads; the standard allows that, but
libstdc++ maintains the formatted-output state (ios_base::width)
with plain reads and writes -- a data race ThreadSanitizer reports
once libstdc++ itself is instrumented
- a mutex around the insertion also keeps whole lines from
interleaving
Boost 1.88 replaced Boost.Process with v2, breaking the v1 API.
Boost 1.89 restores v1 compatibility via <boost/process/v1.hpp>.
- Fail configuration if Boost 1.88 is detected
- Define FAIRMQ_BOOST_PROCESS_V1_HEADER for Boost >= 1.89
- Use conditional includes to select v1.hpp or process.hpp
- Add namespace aliases (bp, bp_this) for portable API access