Make sure to wait for all subprocesses in the process-wrapper. This is take 3 of https://github.com/bazelbuild/bazel/commit/7828118ea8f4150aa1eae4ab3133935ffe221eb5 and then https://github.com/bazelbuild/bazel/commit/9c1853aa2fe49cf80dd467bb4020eb0822d53881, both of which required a Bazel release rollback due to unforeseen problems (the latter of which caused some tests to never complete). This CL is an identical repeat of https://github.com/bazelbuild/bazel/commit/9c1853aa2fe49cf80dd467bb4020eb0822d53881, the only difference being that the changes to the process-wrapper are now gated behind a flag to allow us to roll them out in a controlled manner. Therefore, this is *still broken* in the same way that caused the second rollback, but I feel more comfortable addressing that bug separately from this roll forward (especially considering the many months that have passed in between). Original description: When we kill the process group, make sure to wait until the results of all subprocesses have been collected to ensure all subprocesses are stopped before the process-wrapper exits. I have been unable to come up with a test case to show that this does anything useful though (in particular because the process-wrapper uses SIGKILL against the processes instead of SIGTERM so I cannot install any handlers to mess things up). Conceptually, the problem existed, but it is a race condition that is very hard to trigger. But I'm adding some unit tests for the internals. Partially fixes https://github.com/bazelbuild/bazel/issues/10245. RELNOTES: None. PiperOrigin-RevId: 312093258
{Fast, Correct} - Choose two
Build and test software of any size, quickly and reliably.
Speed up your builds and tests: Bazel rebuilds only what is necessary. With advanced local and distributed caching, optimized dependency analysis and parallel execution, you get fast and incremental builds.
One tool, multiple languages: Build and test Java, C++, Android, iOS, Go, and a wide variety of other language platforms. Bazel runs on Windows, macOS, and Linux.
Scalable: Bazel helps you scale your organization, codebase, and continuous integration solution. It handles codebases of any size, in multiple repositories or a huge monorepo.
Extensible to your needs: Easily add support for new languages and platforms with Bazel's familiar extension language. Share and re-use language rules written by the growing Bazel community.
Follow our tutorials:
See CONTRIBUTING.md