summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_resource.c
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2002-10-09 17:17:24 +0000
committerjhb <jhb@FreeBSD.org>2002-10-09 17:17:24 +0000
commit7cc0ed53c23287ab506f8f86ebbadb958fab6ec7 (patch)
tree3e3a76a37ddfc3f0b9a6307cc20b48df759ba06c /sys/kern/kern_resource.c
parent984ea4a3cd799fdd0c660a22fffc3f5f40fa100c (diff)
downloadFreeBSD-src-7cc0ed53c23287ab506f8f86ebbadb958fab6ec7.zip
FreeBSD-src-7cc0ed53c23287ab506f8f86ebbadb958fab6ec7.tar.gz
- Move p_cpulimit to struct proc from struct plimit and protect it with
sched_lock. This means that we no longer access p_limit in mi_switch() and the p_limit pointer can be protected by the proc lock. - Remove PRS_ZOMBIE check from CPU limit test in mi_switch(). PRS_ZOMBIE processes don't call mi_switch(), and even if they did there is no longer the danger of p_limit being NULL (which is what the original zombie check was added for). - When we bump the current processes soft CPU limit in ast(), just bump the private p_cpulimit instead of the shared rlimit. This fixes an XXX for some value of fix. There is still a (probably benign) bug in that this code doesn't check that the new soft limit exceeds the hard limit. Inspired by: bde (2)
Diffstat (limited to 'sys/kern/kern_resource.c')
-rw-r--r--sys/kern/kern_resource.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/sys/kern/kern_resource.c b/sys/kern/kern_resource.c
index 7eb9480..668a8a2 100644
--- a/sys/kern/kern_resource.c
+++ b/sys/kern/kern_resource.c
@@ -565,10 +565,9 @@ dosetrlimit(td, which, limp)
switch (which) {
case RLIMIT_CPU:
- if (limp->rlim_cur > RLIM_INFINITY / (rlim_t)1000000)
- p->p_limit->p_cpulimit = RLIM_INFINITY;
- else
- p->p_limit->p_cpulimit = limp->rlim_cur;
+ mtx_lock_spin(&sched_lock);
+ p->p_cpulimit = limp->rlim_cur;
+ mtx_unlock_spin(&sched_lock);
break;
case RLIMIT_DATA:
if (limp->rlim_cur > maxdsiz)
OpenPOWER on IntegriCloud