Prefer Windows threads to pthreads #1207
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
On mingw ASIO can only detect pthreads if the pthread header is included before it. Since mingw can use both pthreads and Windows threads, if you have multiple source files that access an
io_context
and only some of them include pthreads before asio then they can use the wrong thread type and corrupt memory. If asio instead prefers Windows threads to pthreads there will be no type confusion and no memory corruption.The following program demonstrates the difference:
When compiled with
-DINCLUDE_PTHREAD
it prints "asio::detail::thread is N4asio6detail12posix_threadE", but when compiled without that define prints "asio::detail::thread is N4asio6detail10win_threadE". With this patch it always prints "asio::detail::thread is N4asio6detail10win_threadE".