Merge pull request #107058 from mihe/script-backtrace-deadlock

Fix various race conditions with capturing of script backtraces
This commit is contained in:
Thaddeus Crews
2025-06-03 15:30:16 -05:00
6 changed files with 44 additions and 47 deletions

View File

@@ -146,14 +146,11 @@ static void handle_crash(int sig) {
print_error("-- END OF C++ BACKTRACE --");
print_error("================================================================");
if (ScriptServer::are_languages_initialized()) {
Vector<Ref<ScriptBacktrace>> script_backtraces = ScriptServer::capture_script_backtraces(false);
for (const Ref<ScriptBacktrace> &backtrace : script_backtraces) {
if (!backtrace->is_empty()) {
print_error(backtrace->format());
print_error(vformat("-- END OF %s BACKTRACE --", backtrace->get_language_name().to_upper()));
print_error("================================================================");
}
for (const Ref<ScriptBacktrace> &backtrace : ScriptServer::capture_script_backtraces(false)) {
if (!backtrace->is_empty()) {
print_error(backtrace->format());
print_error(vformat("-- END OF %s BACKTRACE --", backtrace->get_language_name().to_upper()));
print_error("================================================================");
}
}

View File

@@ -176,14 +176,11 @@ static void handle_crash(int sig) {
print_error("-- END OF C++ BACKTRACE --");
print_error("================================================================");
if (ScriptServer::are_languages_initialized()) {
Vector<Ref<ScriptBacktrace>> script_backtraces = ScriptServer::capture_script_backtraces(false);
for (const Ref<ScriptBacktrace> &backtrace : script_backtraces) {
if (!backtrace->is_empty()) {
print_error(backtrace->format());
print_error(vformat("-- END OF %s BACKTRACE --", backtrace->get_language_name().to_upper()));
print_error("================================================================");
}
for (const Ref<ScriptBacktrace> &backtrace : ScriptServer::capture_script_backtraces(false)) {
if (!backtrace->is_empty()) {
print_error(backtrace->format());
print_error(vformat("-- END OF %s BACKTRACE --", backtrace->get_language_name().to_upper()));
print_error("================================================================");
}
}

View File

@@ -230,14 +230,11 @@ DWORD CrashHandlerException(EXCEPTION_POINTERS *ep) {
SymCleanup(process);
if (ScriptServer::are_languages_initialized()) {
Vector<Ref<ScriptBacktrace>> script_backtraces = ScriptServer::capture_script_backtraces(false);
for (const Ref<ScriptBacktrace> &backtrace : script_backtraces) {
if (!backtrace->is_empty()) {
print_error(backtrace->format());
print_error(vformat("-- END OF %s BACKTRACE --", backtrace->get_language_name().to_upper()));
print_error("================================================================");
}
for (const Ref<ScriptBacktrace> &backtrace : ScriptServer::capture_script_backtraces(false)) {
if (!backtrace->is_empty()) {
print_error(backtrace->format());
print_error(vformat("-- END OF %s BACKTRACE --", backtrace->get_language_name().to_upper()));
print_error("================================================================");
}
}

View File

@@ -184,14 +184,11 @@ extern void CrashHandlerException(int signal) {
print_error("-- END OF C++ BACKTRACE --");
print_error("================================================================");
if (ScriptServer::are_languages_initialized()) {
Vector<Ref<ScriptBacktrace>> script_backtraces = ScriptServer::capture_script_backtraces(false);
for (const Ref<ScriptBacktrace> &backtrace : script_backtraces) {
if (!backtrace->is_empty()) {
print_error(backtrace->format());
print_error(vformat("-- END OF %s BACKTRACE --", backtrace->get_language_name().to_upper()));
print_error("================================================================");
}
for (const Ref<ScriptBacktrace> &backtrace : ScriptServer::capture_script_backtraces(false)) {
if (!backtrace->is_empty()) {
print_error(backtrace->format());
print_error(vformat("-- END OF %s BACKTRACE --", backtrace->get_language_name().to_upper()));
print_error("================================================================");
}
}
}