diff options
author | Ian Moffett <ian@osmora.org> | 2025-08-11 04:57:52 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-08-11 04:57:52 -0400 |
commit | ac5d6bcfa52d97f3d0d00773506464a256dcb678 (patch) | |
tree | 19071f546ab916099c6d4834be87c1982944a11a /sys/kern | |
parent | 7fc5f9b02fa12918188123167bbfec9178726e53 (diff) |
kernel: Increment g_nthreads in proc_init() only
It seems somewhat dangerous to have to manually increment the number of
threads every time we make a process. This change makes every call to
proc_init() increment the number of threads. The value is decremented
once the process exits.
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/kern_proc.c | 3 | ||||
-rw-r--r-- | sys/kern/kern_spawn.c | 5 |
2 files changed, 3 insertions, 5 deletions
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c index 8840940..8bc5680 100644 --- a/sys/kern/kern_proc.c +++ b/sys/kern/kern_proc.c @@ -39,6 +39,8 @@ #include <string.h> #include <crc32.h> +extern volatile size_t g_nthreads; + pid_t getpid(void) { @@ -114,6 +116,7 @@ proc_init(struct proc *td, struct proc *parent) /* Add to parent leafq */ TAILQ_INSERT_TAIL(&parent->leafq, td, leaf_link); atomic_inc_int(&parent->nleaves); + atomic_inc_64(&g_nthreads); td->parent = parent; td->exit_status = -1; td->cred = parent->cred; diff --git a/sys/kern/kern_spawn.c b/sys/kern/kern_spawn.c index 5f9262d..7962ced 100644 --- a/sys/kern/kern_spawn.c +++ b/sys/kern/kern_spawn.c @@ -34,10 +34,8 @@ #include <sys/mman.h> #include <sys/systm.h> #include <sys/errno.h> -#include <sys/atomic.h> #include <sys/syslog.h> #include <sys/syscall.h> -#include <sys/atomic.h> #include <sys/signal.h> #include <sys/limits.h> #include <sys/sched.h> @@ -50,7 +48,6 @@ #define ARGVP_MAX (ARG_MAX / sizeof(void *)) static size_t next_pid = 1; -extern volatile size_t g_nthreads; /* * TODO: envp @@ -183,8 +180,6 @@ spawn(struct proc *cur, void(*func)(void), void *p, int flags, struct proc **new } newproc->data = p; - atomic_inc_64(&g_nthreads); - newproc->pid = next_pid++; sched_enqueue_td(newproc); pid = newproc->pid; |