Page MenuHomeFreeBSD

D54215.diff
No OneTemporary

D54215.diff

diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c
--- a/sys/kern/kern_fork.c
+++ b/sys/kern/kern_fork.c
@@ -1065,8 +1065,6 @@
#ifdef MAC
mac_proc_init(newproc);
#endif
- newproc->p_klist = knlist_alloc(&newproc->p_mtx);
- STAILQ_INIT(&newproc->p_ktr);
/*
* Increment the count of procs running with this uid. Don't allow
@@ -1079,6 +1077,8 @@
chgproccnt(cred->cr_ruidinfo, 1, 0);
}
+ newproc->p_klist = knlist_alloc(&newproc->p_mtx);
+
do_fork(td, fr, newproc, td2, vm2, fp_procdesc);
error = 0;
goto cleanup;
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c
--- a/sys/kern/kern_proc.c
+++ b/sys/kern/kern_proc.c
@@ -241,11 +241,9 @@
p = (struct proc *)mem;
td = FIRST_THREAD_IN_PROC(p);
if (td != NULL) {
-#ifdef INVARIANTS
KASSERT((p->p_numthreads == 1),
- ("bad number of threads in exiting process"));
- KASSERT(STAILQ_EMPTY(&p->p_ktr), ("proc_dtor: non-empty p_ktr"));
-#endif
+ ("too many threads in exiting process"));
+
/* Free all OSD associated to this thread. */
osd_thread_exit(td);
ast_kclear(td);
@@ -253,6 +251,7 @@
/* Make sure all thread destructors are executed */
EVENTHANDLER_DIRECT_INVOKE(thread_dtor, td);
}
+ KASSERT(STAILQ_EMPTY(&p->p_ktr), ("proc_dtor: non-empty p_ktr"));
EVENTHANDLER_DIRECT_INVOKE(process_dtor, p);
#ifdef KDTRACE_HOOKS
kdtrace_proc_dtor(p);
@@ -281,6 +280,7 @@
p->p_stats = pstats_alloc();
p->p_pgrp = NULL;
TAILQ_INIT(&p->p_kqtim_stop);
+ STAILQ_INIT(&p->p_ktr);
return (0);
}

File Metadata

Mime Type
text/plain
Expires
Thu, Jul 9, 12:10 AM (18 h, 51 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
34865344
Default Alt Text
D54215.diff (1 KB)

Event Timeline