Commit 55c2566c authored by Camillo's avatar Camillo Committed by V8 LUCI CQ

Reland "[d8] Dump stack trace on d8 tests timeouts on posix systems"

This is a reland of commit 5592bad9

Disable timeout signal handler with --fuzzing

Original change's description:
> [d8] Dump stack trace on d8 tests timeouts on posix systems
>
> - Add a SIGTERM handler in d8 that dupms the stack trace
> - Send SIGTERM before SIGKILL in the test runner
>
> Bug: v8:13115
> Change-Id: I75285f33caabab61ff6ae83c1fbc6faf45cf595a
> Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3791906
> Reviewed-by: Michael Achenbach <machenbach@chromium.org>
> Reviewed-by: Igor Sheludko <ishell@chromium.org>
> Commit-Queue: Camillo Bruni <cbruni@chromium.org>
> Cr-Commit-Position: refs/heads/main@{#82173}

Bug: v8:13115
Change-Id: I8ddbf2a5e601737c2326384d832902b38c371f81
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3816670Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
Commit-Queue: Camillo Bruni <cbruni@chromium.org>
Cr-Commit-Position: refs/heads/main@{#82296}
parent 186baea1
......@@ -70,6 +70,10 @@
#include "src/utils/utils.h"
#include "src/web-snapshot/web-snapshot.h"
#if V8_OS_POSIX
#include <signal.h>
#endif // V8_OS_POSIX
#ifdef V8_FUZZILLI
#include "src/d8/cov.h"
#endif // V8_FUZZILLI
......@@ -5515,9 +5519,34 @@ bool HasFlagThatRequiresSharedIsolate() {
return i::FLAG_shared_string_table || i::FLAG_harmony_struct;
}
#ifdef V8_OS_POSIX
void d8_sigterm_handler(int signal) {
// Dump stacktraces when terminating d8 instances with SIGTERM.
// SIGKILL is not intercepted.
if (signal == SIGTERM) {
FATAL("d8: Received SIGTERM signal (likely due to a TIMEOUT)\n");
} else {
UNREACHABLE();
}
}
#endif // V8_OS_POSIX
void d8_install_sigterm_handler() {
#ifdef V8_OS_POSIX
CHECK(!i::FLAG_fuzzing);
struct sigaction sa;
sa.sa_handler = d8_sigterm_handler;
sigemptyset(&sa.sa_mask);
if (sigaction(SIGTERM, &sa, NULL) == -1) {
FATAL("Could not install SIGTERM handler");
}
#endif // V8_OS_POSIX
}
} // namespace
int Shell::Main(int argc, char* argv[]) {
if (!i::FLAG_fuzzing) d8_install_sigterm_handler();
v8::base::EnsureConsoleOutput();
if (!SetOptions(argc, argv)) return 1;
......
......@@ -200,6 +200,11 @@ class PosixCommand(BaseCommand):
def _kill_process(self, process):
# Kill the whole process group (PID == GPID after setsid).
# First try a soft term to allow some feedback
os.killpg(process.pid, signal.SIGTERM)
# Give the process some time to cleanly terminate.
time.sleep(0.1)
# Forcefully kill processes.
os.killpg(process.pid, signal.SIGKILL)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment