Initialize and destroy the struct proc mutex in the proc zone's init and
fini routines instead of in fork() and wait(). This has the nice side benefit that the proc lock of any process on the allproc list is always valid and sched_lock doesn't have to be used to test against PRS_NEW anymore.
This commit is contained in:
parent
cbfe6d117c
commit
7d447c956b
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=114461
@ -685,7 +685,6 @@ wait1(struct thread *td, struct wait_args *uap, int compat)
|
||||
* release while still running in process context.
|
||||
*/
|
||||
vm_waitproc(p);
|
||||
mtx_destroy(&p->p_mtx);
|
||||
#ifdef MAC
|
||||
mac_destroy_proc(p);
|
||||
#endif
|
||||
|
@ -447,6 +447,9 @@ fork1(td, flags, pages, procp)
|
||||
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 @@ fork1(td, flags, pages, procp)
|
||||
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,
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user