diff options
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/kern_fork.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c index 6feeee2..abb7707 100644 --- a/sys/kern/kern_fork.c +++ b/sys/kern/kern_fork.c @@ -27,6 +27,8 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include <sys/mman.h> +#include <sys/tree.h> #include <sys/types.h> #include <sys/proc.h> #include <sys/errno.h> @@ -49,12 +51,17 @@ int fork1(struct proc *cur, int flags, void(*ip)(void), struct proc **newprocp) { struct proc *newproc; + struct mmap_lgdr *mlgdr; int status = 0; newproc = dynalloc(sizeof(*newproc)); if (newproc == NULL) return -ENOMEM; + mlgdr = dynalloc(sizeof(*mlgdr)); + if (mlgdr == NULL) + return -ENOMEM; + memset(newproc, 0, sizeof(*newproc)); status = md_fork(newproc, cur, (uintptr_t)ip); if (status != 0) @@ -64,6 +71,11 @@ fork1(struct proc *cur, int flags, void(*ip)(void), struct proc **newprocp) if (newprocp != NULL) *newprocp = newproc; + /* Initialize the mmap ledger */ + mlgdr->nbytes = 0; + RBT_INIT(lgdr_entries, &mlgdr->hd); + newproc->mlgdr = mlgdr; + newproc->pid = ++nthreads; signals_init(newproc); sched_enqueue_td(newproc); |