mirror of
https://github.com/JannisHeydemann/BoredOS.git
synced 2026-05-30 02:16:58 +00:00
kernel: prevent infinite loop in process termination
This commit is contained in:
@@ -691,10 +691,12 @@ void process_kill_by_tty(int tty_id) {
|
|||||||
if (tty_id < 0) return;
|
if (tty_id < 0) return;
|
||||||
for (int i = 0; i < MAX_PROCESSES; i++) {
|
for (int i = 0; i < MAX_PROCESSES; i++) {
|
||||||
if (processes[i].pid != 0xFFFFFFFF && processes[i].pid != 0 && processes[i].tty_id == tty_id) {
|
if (processes[i].pid != 0xFFFFFFFF && processes[i].pid != 0 && processes[i].tty_id == tty_id) {
|
||||||
|
if (!processes[i].exited && !processes[i].kill_pending) {
|
||||||
process_terminate(&processes[i]);
|
process_terminate(&processes[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void process_cleanup_inner(process_t *proc) {
|
static void process_cleanup_inner(process_t *proc) {
|
||||||
if (!proc || proc->pid == 0xFFFFFFFF) return;
|
if (!proc || proc->pid == 0xFFFFFFFF) return;
|
||||||
@@ -735,6 +737,7 @@ void process_terminate(process_t *to_delete) {
|
|||||||
|
|
||||||
void process_terminate_with_status(process_t *to_delete, int status) {
|
void process_terminate_with_status(process_t *to_delete, int status) {
|
||||||
if (!to_delete || to_delete->pid == 0xFFFFFFFF || to_delete->pid == 0) return;
|
if (!to_delete || to_delete->pid == 0xFFFFFFFF || to_delete->pid == 0) return;
|
||||||
|
if (to_delete->exited || to_delete->kill_pending) return;
|
||||||
|
|
||||||
uint32_t cpu_count = smp_cpu_count();
|
uint32_t cpu_count = smp_cpu_count();
|
||||||
for (uint32_t c = 0; c < cpu_count && c < MAX_CPUS_SCHED; c++) {
|
for (uint32_t c = 0; c < cpu_count && c < MAX_CPUS_SCHED; c++) {
|
||||||
|
|||||||
Reference in New Issue
Block a user