mirror of
https://github.com/BoredDevNL/BoredOS.git
synced 2026-05-15 10:48:38 +00:00
kernel: prevent infinite loop in process termination
This commit is contained in:
parent
d007600e30
commit
8d4ffd8a09
1 changed files with 4 additions and 1 deletions
|
|
@ -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++) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue