diff --git a/executer/user/mcexec.c b/executer/user/mcexec.c index 149f9b24..1be6c220 100644 --- a/executer/user/mcexec.c +++ b/executer/user/mcexec.c @@ -3027,8 +3027,9 @@ create_tracer() term_param[1] = uti_desc->tid; term_param[3] = uti_desc->key; code = st; - if (exited == 2 || // exit_group - WIFSIGNALED(st)) { + /* exit_group case. Note that killing-signal kills mcexec and tracer in terminate(), + so this won't be reached. */ + if (exited == 2) { code |= 0x0000000100000000; } term_param[2] = code; diff --git a/kernel/syscall.c b/kernel/syscall.c index cfe0c076..d8173bd7 100644 --- a/kernel/syscall.c +++ b/kernel/syscall.c @@ -9123,13 +9123,13 @@ util_thread(struct uti_attr *arg) kfree(uti_clv); if (rc >= 0) { - if (rc & 0x10000007f) { // exit_group || signal - dkprintf("%s: exit_group || signal\n", __FUNCTION__); + if (rc & 0x100000000) { /* exit_group */ + dkprintf("%s: exit_group, tid=%d,rc=%lx\n", __FUNCTION__, thread->tid, rc); thread->proc->nohost = 1; terminate((rc >> 8) & 255, rc & 255); - } - else { - dkprintf("%s: !exit_group && !signal\n", __FUNCTION__); + } else { + /* tracer has detected exit or killed by signal */ + dkprintf("%s: exit, pid=%d,tid=%d,rc=%lx\n", __FUNCTION__, thread->proc->pid, thread->tid, rc); request.number = __NR_sched_setaffinity; request.args[0] = 1; request.args[1] = free_address;