Page MenuHomeFreeBSD

D31495.id93558.diff
No OneTemporary

D31495.id93558.diff

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
@@ -122,13 +122,13 @@
/*
* Other process lists
*/
-struct pidhashhead *pidhashtbl;
+struct pidhashhead *pidhashtbl = NULL;
struct sx *pidhashtbl_lock;
u_long pidhash;
u_long pidhashlock;
struct pgrphashhead *pgrphashtbl;
u_long pgrphash;
-struct proclist allproc;
+struct proclist allproc = LIST_HEAD_INITIALIZER(allproc);
struct sx __exclusive_cache_line allproc_lock;
struct sx __exclusive_cache_line proctree_lock;
struct mtx __exclusive_cache_line ppeers_lock;
@@ -185,7 +185,6 @@
sx_init(&proctree_lock, "proctree");
mtx_init(&ppeers_lock, "p_peers", NULL, MTX_DEF);
mtx_init(&procid_lock, "procid", NULL, MTX_DEF);
- LIST_INIT(&allproc);
pidhashtbl = hashinit(maxproc / 4, M_PROC, &pidhash);
pidhashlock = (pidhash + 1) / 64;
if (pidhashlock > 0)
diff --git a/sys/kern/subr_kdb.c b/sys/kern/subr_kdb.c
--- a/sys/kern/subr_kdb.c
+++ b/sys/kern/subr_kdb.c
@@ -608,6 +608,10 @@
struct thread *thr;
u_int i;
+ /* This function may be called early. */
+ if (pidhashtbl == NULL)
+ return (&thread0);
+
for (i = 0; i <= pidhash; i++) {
LIST_FOREACH(p, &pidhashtbl[i], p_hash) {
thr = FIRST_THREAD_IN_PROC(p);
@@ -651,6 +655,8 @@
thr = TAILQ_NEXT(thr, td_plist);
if (thr != NULL)
return (thr);
+ if (pidhashtbl == NULL)
+ return (NULL);
hash = p->p_pid & pidhash;
for (;;) {
p = LIST_NEXT(p, p_hash);

File Metadata

Mime Type
text/plain
Expires
Sun, Feb 15, 8:57 AM (14 h, 56 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28734667
Default Alt Text
D31495.id93558.diff (1 KB)

Event Timeline