summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2025-08-11 04:57:52 -0400
committerIan Moffett <ian@osmora.org>2025-08-11 04:57:52 -0400
commitac5d6bcfa52d97f3d0d00773506464a256dcb678 (patch)
tree19071f546ab916099c6d4834be87c1982944a11a
parent7fc5f9b02fa12918188123167bbfec9178726e53 (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>
-rw-r--r--sys/kern/kern_proc.c3
-rw-r--r--sys/kern/kern_spawn.c5
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;