summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2003-08-04 20:28:20 +0000
committerjhb <jhb@FreeBSD.org>2003-08-04 20:28:20 +0000
commit52adb98aefd6ee43674dc6ccd40f9644daa3db66 (patch)
treed12abd056d97a52ac46bcb15559bb6e4e9b31282
parenta69166c61f00bbec68513d66d3613f2d50a5fe9a (diff)
downloadFreeBSD-src-52adb98aefd6ee43674dc6ccd40f9644daa3db66.zip
FreeBSD-src-52adb98aefd6ee43674dc6ccd40f9644daa3db66.tar.gz
Set td_critnest to 1 when setting up a thread since it is a MI field with
MI values. This ensures that td_critnest for a newly fork'd thread is always valid. Requested by: bde (a long time ago)
-rw-r--r--sys/kern/kern_kse.c1
-rw-r--r--sys/kern/kern_thread.c1
-rw-r--r--sys/sys/proc.h2
3 files changed, 3 insertions, 1 deletions
diff --git a/sys/kern/kern_kse.c b/sys/kern/kern_kse.c
index 6bcbd95..421e437 100644
--- a/sys/kern/kern_kse.c
+++ b/sys/kern/kern_kse.c
@@ -142,6 +142,7 @@ thread_ctor(void *mem, int size, void *arg)
td = (struct thread *)mem;
td->td_state = TDS_INACTIVE;
td->td_oncpu = NOCPU;
+ td->td_critnest = 1;
}
/*
diff --git a/sys/kern/kern_thread.c b/sys/kern/kern_thread.c
index 6bcbd95..421e437 100644
--- a/sys/kern/kern_thread.c
+++ b/sys/kern/kern_thread.c
@@ -142,6 +142,7 @@ thread_ctor(void *mem, int size, void *arg)
td = (struct thread *)mem;
td->td_state = TDS_INACTIVE;
td->td_oncpu = NOCPU;
+ td->td_critnest = 1;
}
/*
diff --git a/sys/sys/proc.h b/sys/sys/proc.h
index 47188fb..97d0699 100644
--- a/sys/sys/proc.h
+++ b/sys/sys/proc.h
@@ -294,7 +294,6 @@ struct thread {
u_int td_uuticks; /* (*) Statclock in user, for UTS */
u_int td_usticks; /* (*) Statclock in kernel, for UTS */
int td_intrval; /* (*) Return value of TDF_INTERRUPT */
- u_int td_critnest; /* (k) Critical section nest level. */
sigset_t td_oldsigmask; /* (k) Saved mask from pre sigpause. */
sigset_t td_sigmask; /* (c) Current signal mask. */
sigset_t td_siglist; /* (c) Sigs arrived, not delivered. */
@@ -330,6 +329,7 @@ struct thread {
struct vm_object *td_altkstack_obj;/* (a) Alternate kstack object. */
vm_offset_t td_altkstack; /* (a) Kernel VA of alternate kstack. */
int td_altkstack_pages; /* (a) Size of the alternate kstack */
+ u_int td_critnest; /* (k) Critical section nest level. */
struct mdthread td_md; /* (k) Any machine-dependent fields. */
struct td_sched *td_sched; /* (*) Scheduler specific data */
};
OpenPOWER on IntegriCloud