diff options
-rw-r--r-- | sys/kern/kern_exit.c | 1 | ||||
-rw-r--r-- | sys/kern/kern_fork.c | 7 | ||||
-rw-r--r-- | sys/kern/kern_proc.c | 3 |
3 files changed, 6 insertions, 5 deletions
diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c index 8e16d3e..b77c1d9 100644 --- a/sys/kern/kern_exit.c +++ b/sys/kern/kern_exit.c @@ -685,7 +685,6 @@ loop: * release while still running in process context. */ vm_waitproc(p); - mtx_destroy(&p->p_mtx); #ifdef MAC mac_destroy_proc(p); #endif diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c index 7d2c65c..17387f8 100644 --- a/sys/kern/kern_fork.c +++ b/sys/kern/kern_fork.c @@ -447,6 +447,9 @@ again: if (pages != 0) pmap_new_altkstack(td2, pages); + PROC_LOCK(p2); + PROC_LOCK(p1); + #define RANGEOF(type, start, end) (offsetof(type, end) - offsetof(type, start)) bzero(&p2->p_startzero, @@ -458,10 +461,6 @@ again: bzero(&kg2->kg_startzero, (unsigned) RANGEOF(struct ksegrp, kg_startzero, kg_endzero)); - mtx_init(&p2->p_mtx, "process lock", NULL, MTX_DEF | MTX_DUPOK); - PROC_LOCK(p2); - PROC_LOCK(p1); - bcopy(&p1->p_startcopy, &p2->p_startcopy, (unsigned) RANGEOF(struct proc, p_startcopy, p_endcopy)); bcopy(&td->td_startcopy, &td2->td_startcopy, diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c index 5ad7882..6810537 100644 --- a/sys/kern/kern_proc.c +++ b/sys/kern/kern_proc.c @@ -194,6 +194,8 @@ proc_init(void *mem, int size) ke = kse_alloc(); kg = ksegrp_alloc(); proc_linkup(p, kg, ke, td); + bzero(&p->p_mtx, sizeof(struct mtx)); + mtx_init(&p->p_mtx, "process lock", NULL, MTX_DEF | MTX_DUPOK); } /* @@ -220,6 +222,7 @@ proc_fini(void *mem, int size) thread_free(td); ksegrp_free(kg); kse_free(ke); + mtx_destroy(&p->p_mtx); } /* |