Skip to content

ctest: Fix spurious build failures with CTEST_USE_LAUNCHERS on Windows

Brad King requested to merge brad.king/cmake:ctest-windows-std-handles into master

Remove the stdio handle inheritance suppression originally added by commit f262298b (... do not inherit pipes in child procs for ctest so it can kill them, 2007-09-11, v2.6.0~1136). It's not clear what problem it was trying to solve, was only done in ctest and not cmake, and since commit 9c3ffe24 (BUG: fix problem with stdout and stderr not showing up in ms dos shells, 2007-09-25, v2.6.0~1066) has not been done in ctest launched under interactive consoles.

Furthermore, the code has been spuriously breaking stdio when ctest is started with both stdout and stderr connected to the same pipe, such as when ctest --launch is used under ninja. This is because it used DuplicateHandle with DUPLICATE_CLOSE_SOURCE on the stdout handle and then the stderr handle. If the handles are the same, then the stderr handle becomes invalid in between these operations, leading to likely-undefined behavior. Since !8665 (merged) this became more noticeable because uv_spawn performs additional verification on stdio handles.

This could be fixed by instead suppressing inheritance via

SetHandleInformation(h, HANDLE_FLAG_INHERIT, 0);

However, the functionality no longer seems necessary, so remove it.

Backport: release

Edited by Brad King

Merge request reports