From 73d60efd537db356b10f07609a96c2839fade885 Mon Sep 17 00:00:00 2001 From: Matheus Date: Mon, 29 Jun 2026 00:45:11 -0300 Subject: [PATCH] jobctl: jobctl_getsession --- kernel-src/include/kernel/jobctl.h | 1 + kernel-src/sys/jobctl.c | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/kernel-src/include/kernel/jobctl.h b/kernel-src/include/kernel/jobctl.h index 19079779..d55821df 100644 --- a/kernel-src/include/kernel/jobctl.h +++ b/kernel-src/include/kernel/jobctl.h @@ -13,6 +13,7 @@ pid_t jobctl_getpgid(proc_t *proc); pid_t jobctl_getsid(proc_t *proc); int jobctl_setctty(proc_t *proc, void *ctty, bool steal); void *jobctl_getctty(proc_t *proc); +proc_t *jobctl_getsession(proc_t *proc); int jobctl_signal(proc_t *proc, int signal, proc_t *sender); proc_t *jobctl_getforeground(proc_t *proc); int jobctl_setforeground(proc_t *session, proc_t *pgrp); diff --git a/kernel-src/sys/jobctl.c b/kernel-src/sys/jobctl.c index 89bd17b6..3f4dcd17 100644 --- a/kernel-src/sys/jobctl.c +++ b/kernel-src/sys/jobctl.c @@ -115,6 +115,19 @@ void *jobctl_getctty(proc_t *proc) { return tty; } +proc_t *jobctl_getsession(proc_t *proc) { + bool intstatus = interrupt_set(false); + spinlock_acquire(&proc->jobctllock); + + proc_t *session = proc->session.leader ? proc->session.leader : proc; + PROC_HOLD(session); + + spinlock_release(&proc->jobctllock); + interrupt_set(intstatus); + + return session; +} + pid_t jobctl_getpgid(proc_t *proc) { bool intstatus = interrupt_set(false); spinlock_acquire(&proc->jobctllock);