summaryrefslogtreecommitdiff
path: root/sys/kern/kern_spawn.c
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2025-07-16 19:33:13 -0400
committerIan Moffett <ian@osmora.org>2025-07-16 19:33:13 -0400
commit015984a53e6b9b089566762ec00973d3aa126ae3 (patch)
tree7a654283b06c67434c9b2936efe648f464a79600 /sys/kern/kern_spawn.c
parenta66c3f8d3d1f70beb3147999db21229803eb7021 (diff)
kernel: proc: Decrement proc count on exit
Previously, our process counter was monotonic (wuh oh!). We want to be sure that it decrements when a process exits. - Rename nthreads to g_nthreads as a global - Atomically increment on enter and decrement on exit Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'sys/kern/kern_spawn.c')
-rw-r--r--sys/kern/kern_spawn.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/kern/kern_spawn.c b/sys/kern/kern_spawn.c
index fcaa194..37c3120 100644
--- a/sys/kern/kern_spawn.c
+++ b/sys/kern/kern_spawn.c
@@ -33,6 +33,7 @@
#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>
@@ -47,7 +48,8 @@
#define ARGVP_MAX (ARG_MAX / sizeof(void *))
-static volatile size_t nthreads = 0;
+static size_t next_pid = 1;
+volatile size_t g_nthreads = 0;
/*
* TODO: envp
@@ -166,7 +168,8 @@ spawn(struct proc *cur, void(*func)(void), void *p, int flags, struct proc **new
newproc->mlgdr = mlgdr;
newproc->flags |= PROC_WAITED;
- newproc->pid = ++nthreads;
+ atomic_inc_64(&g_nthreads);
+ newproc->pid = next_pid++;
signals_init(newproc);
sched_enqueue_td(newproc);
pid = newproc->pid;