| commit | 9c1853aa2fe49cf80dd467bb4020eb0822d53881 | [log] [tgz] |
|---|---|---|
| author | jmmv <jmmv@google.com> | Fri Dec 20 10:02:21 2019 -0800 |
| committer | Copybara-Service <copybara-worker@google.com> | Fri Dec 20 10:03:27 2019 -0800 |
| tree | be26b07eabdfe35f9e5e72b48a5fc7909babe89c | |
| parent | 2ad456a919f6f4295753bce679800f4d52e1de35 [diff] |
Make sure to wait for all subprocesses in the process-wrapper. This is take 2 of https://github.com/bazelbuild/bazel/commit/7828118ea8f4150aa1eae4ab3133935ffe221eb5, which was rolled back because it broke downstream Android tests. This change differs from the original one in that, on Linux, we make sure to kill any subprocess that has escaped the process group (as otherwise we can get stuck due to the new use of the child subreaper feature). 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. Fixes: https://github.com/bazelbuild/bazel/issues/10245. RELNOTES: None. PiperOrigin-RevId: 286596638
{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