Skip to content

Commit 48a5871

Browse files
kpamnanyd-netto
authored andcommitted
RAI: do not prepend thread ID to backtraces from signal handler context
Also show the signal number when we have it.
1 parent c8bb4b8 commit 48a5871

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

src/signals-unix.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1082,7 +1082,7 @@ static void *signal_listener(void *arg)
10821082
jl_safe_printf("\nsignal (%d): %s\n", sig, strsignal(sig));
10831083
size_t i;
10841084
for (i = 0; i < signal_bt_size; i += jl_bt_entry_size(signal_bt_data + i)) {
1085-
jl_print_bt_entry_codeloc(-1, signal_bt_data + i);
1085+
jl_print_bt_entry_codeloc(sig, signal_bt_data + i);
10861086
}
10871087
}
10881088
}

src/stackwalk.c

+15-4
Original file line numberDiff line numberDiff line change
@@ -753,11 +753,14 @@ static void jl_print_debugloc(const char *pre_str, jl_debuginfo_t *debuginfo, jl
753753
void jl_print_bt_entry_codeloc(int sig, jl_bt_element_t *bt_entry) JL_NOTSAFEPOINT
754754
{
755755
char sig_str[32], pre_str[64];
756-
sig_str[0] = '\0';
756+
sig_str[0] = pre_str[0] = '\0';
757757
if (sig != -1) {
758758
snprintf(sig_str, 32, "signal (%d) ", sig);
759759
}
760-
snprintf(pre_str, 64, "%sthread (%d) ", sig_str, jl_threadid() + 1);
760+
// do not call jl_threadid if there's no current task
761+
if (jl_get_current_task()) {
762+
snprintf(pre_str, 64, "%sthread (%d) ", sig_str, jl_threadid() + 1);
763+
}
761764

762765
if (jl_bt_is_native(bt_entry)) {
763766
jl_print_native_codeloc(pre_str, bt_entry[0].uintptr);
@@ -1369,7 +1372,11 @@ JL_DLLEXPORT jl_record_backtrace_result_t jl_record_backtrace(jl_task_t *t, jl_b
13691372
JL_DLLEXPORT void jl_gdblookup(void* ip)
13701373
{
13711374
char pre_str[64];
1372-
snprintf(pre_str, 64, "thread (%d) ", jl_threadid() + 1);
1375+
pre_str[0] = '\0';
1376+
// do not call jl_threadid if there's no current task
1377+
if (jl_get_current_task()) {
1378+
snprintf(pre_str, 64, "thread (%d) ", jl_threadid() + 1);
1379+
}
13731380
jl_print_native_codeloc(pre_str, (uintptr_t)ip);
13741381
}
13751382

@@ -1429,7 +1436,11 @@ JL_DLLEXPORT void jl_print_task_backtraces(int show_done) JL_NOTSAFEPOINT
14291436

14301437
size_t nthreads = jl_atomic_load_acquire(&jl_n_threads);
14311438
jl_ptls_t *allstates = jl_atomic_load_relaxed(&jl_all_tls_states);
1432-
int ctid = jl_threadid() + 1;
1439+
int ctid = -1;
1440+
// do not call jl_threadid if there's no current task
1441+
if (jl_get_current_task()) {
1442+
ctid = jl_threadid() + 1;
1443+
}
14331444
jl_safe_printf("thread (%d) ++++ Task backtraces\n", ctid);
14341445
for (size_t i = 0; i < nthreads; i++) {
14351446
jl_ptls_t ptls2 = allstates[i];

0 commit comments

Comments
 (0)