summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2001-03-07 03:02:56 +0000
committerjhb <jhb@FreeBSD.org>2001-03-07 03:02:56 +0000
commit0bc406044c15e508f4feb23bd7fae164add2fce0 (patch)
tree5ad0f14fc03f4e729faeefabdb57ae71e0a86e55 /sys/kern
parent3ef36efa7c7b367391a82c794aa48793204772c1 (diff)
downloadFreeBSD-src-0bc406044c15e508f4feb23bd7fae164add2fce0.zip
FreeBSD-src-0bc406044c15e508f4feb23bd7fae164add2fce0.tar.gz
Lock the process while sending it SIGARLM and updating p_realtimer.
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/kern_time.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/kern/kern_time.c b/sys/kern/kern_time.c
index 93ab1dc..7ad9c17 100644
--- a/sys/kern/kern_time.c
+++ b/sys/kern/kern_time.c
@@ -547,9 +547,11 @@ realitexpire(arg)
int s;
p = (struct proc *)arg;
+ PROC_LOCK(p);
psignal(p, SIGALRM);
if (!timevalisset(&p->p_realtimer.it_interval)) {
timevalclear(&p->p_realtimer.it_value);
+ PROC_UNLOCK(p);
return;
}
for (;;) {
@@ -563,10 +565,12 @@ realitexpire(arg)
callout_reset(&p->p_itcallout, tvtohz(&ntv) - 1,
realitexpire, p);
splx(s);
+ PROC_UNLOCK(p);
return;
}
splx(s);
}
+ /*NOTREACHED*/
}
/*
OpenPOWER on IntegriCloud