Page MenuHomeFreeBSD

D34559.id103854.diff
No OneTemporary

D34559.id103854.diff

diff --git a/head/sys/kern/kern_time.c b/head/sys/kern/kern_time.c
--- a/head/sys/kern/kern_time.c
+++ b/head/sys/kern/kern_time.c
@@ -254,13 +254,16 @@
kern_thread_cputime(struct thread *targettd, struct timespec *ats)
{
uint64_t runtime, curtime, switchtime;
+ struct proc *p;
if (targettd == NULL) { /* current thread */
- critical_enter();
+ p = curthread->td_proc;
+ PROC_LOCK_ASSERT(p, MA_OWNED);
+ PROC_STATLOCK(p);
switchtime = PCPU_GET(switchtime);
curtime = cpu_ticks();
runtime = curthread->td_runtime;
- critical_exit();
+ PROC_STATUNLOCK(p);
runtime += curtime - switchtime;
} else {
PROC_LOCK_ASSERT(targettd->td_proc, MA_OWNED);
@@ -362,7 +365,9 @@
ats->tv_nsec = 0;
break;
case CLOCK_THREAD_CPUTIME_ID:
+ PROC_LOCK(p);
kern_thread_cputime(NULL, ats);
+ PROC_UNLOCK(p);
break;
case CLOCK_PROCESS_CPUTIME_ID:
PROC_LOCK(p);

File Metadata

Mime Type
text/plain
Expires
Sat, Jul 25, 1:23 PM (2 h, 49 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35474770
Default Alt Text
D34559.id103854.diff (890 B)

Event Timeline