From b61d391778d36ea6ab8e326997a164f2e5564d15 Mon Sep 17 00:00:00 2001 From: Matheus Date: Wed, 22 May 2024 09:44:11 -0300 Subject: [PATCH] scheduler: hold reference on sched_getprocfrompid --- kernel-src/sys/scheduler.c | 11 +++++++++-- kernel-src/sys/syscalls/kill.c | 4 ++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/kernel-src/sys/scheduler.c b/kernel-src/sys/scheduler.c index 7a56c7a9..92da9c36 100644 --- a/kernel-src/sys/scheduler.c +++ b/kernel-src/sys/scheduler.c @@ -38,9 +38,14 @@ static pid_t currpid = 1; proc_t *sched_getprocfrompid(int pid) { MUTEX_ACQUIRE(&sched_pidtablemutex, false); - void *proc = NULL; - hashtable_get(&pidtable, &proc, &pid, sizeof(pid)); + void *_proc = NULL; + hashtable_get(&pidtable, &_proc, &pid, sizeof(pid)); + proc_t *proc = _proc; + if (proc) { + PROC_HOLD(proc); + } MUTEX_RELEASE(&sched_pidtablemutex); + return proc; } @@ -321,6 +326,8 @@ void sched_inactiveproc(proc_t *proc) { hashtable_remove(&pidtable, &proc->pid, sizeof(proc->pid)); + //arch_e9_puts("\n\ndestroy proc\n\n"); + //printf("destroy proc\n"); sched_destroyproc(proc); } diff --git a/kernel-src/sys/syscalls/kill.c b/kernel-src/sys/syscalls/kill.c index d8e1a15f..d3ee3690 100644 --- a/kernel-src/sys/syscalls/kill.c +++ b/kernel-src/sys/syscalls/kill.c @@ -35,6 +35,10 @@ syscallret_t syscall_kill(context_t *context, int pid, int signal) { else ret.errno = jobctl_signal(target, signal); + if (target) { + PROC_RELEASE(target); + } + ret.errno = 0; ret.ret = 0; return ret;