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;