Add BazelCrashUtils to make it easier to crash the JVM when uncaught exceptions are detected in async worker threads.
PiperOrigin-RevId: 193725871
diff --git a/src/main/java/com/google/devtools/build/lib/util/CustomExitCodePublisher.java b/src/main/java/com/google/devtools/build/lib/util/CustomExitCodePublisher.java
index c281f5a..d94cf86 100644
--- a/src/main/java/com/google/devtools/build/lib/util/CustomExitCodePublisher.java
+++ b/src/main/java/com/google/devtools/build/lib/util/CustomExitCodePublisher.java
@@ -13,28 +13,34 @@
// limitations under the License.
package com.google.devtools.build.lib.util;
-import com.google.devtools.build.lib.vfs.FileSystemUtils;
-import com.google.devtools.build.lib.vfs.Path;
import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import javax.annotation.Nullable;
/**
* Provides an external way for the Bazel server to communicate its exit code to the client, when
* the main gRPC channel is unavailable because the exit is too abrupt or originated in an async
* thread.
+ *
+ * <p>Uses Java 8 {@link Path} objects rather than Bazel ones to avoid depending on the rest of
+ * Bazel.
*/
public class CustomExitCodePublisher {
private static final String EXIT_CODE_FILENAME = "exit_code_to_use_on_abrupt_exit";
@Nullable private static Path abruptExitCodeFilePath = null;
- public static void setAbruptExitStatusFileDir(Path path) {
- abruptExitCodeFilePath = path.getChild(EXIT_CODE_FILENAME);
+ public static void setAbruptExitStatusFileDir(String path) {
+ abruptExitCodeFilePath = Paths.get(path).resolve(EXIT_CODE_FILENAME);
}
public static void maybeWriteExitStatusFile(int exitCode) {
if (abruptExitCodeFilePath != null) {
try {
- FileSystemUtils.writeContentAsLatin1(abruptExitCodeFilePath, String.valueOf(exitCode));
+ Files.write(
+ abruptExitCodeFilePath, String.valueOf(exitCode).getBytes(StandardCharsets.UTF_8));
} catch (IOException ioe) {
System.err.printf(
"io error writing %d to abrupt exit status file %s: %s\n",