diff options
author | davidxu <davidxu@FreeBSD.org> | 2008-01-18 13:00:28 +0000 |
---|---|---|
committer | davidxu <davidxu@FreeBSD.org> | 2008-01-18 13:00:28 +0000 |
commit | ae86af8218f9798ff70696ccc00d8f840fe386e0 (patch) | |
tree | 46bd7a3432a6e78987dacf3e697839649a862436 /sys/kern/kern_time.c | |
parent | ba4fb8ac52b3b401d72c452359c6c3353af7013a (diff) | |
download | FreeBSD-src-ae86af8218f9798ff70696ccc00d8f840fe386e0.zip FreeBSD-src-ae86af8218f9798ff70696ccc00d8f840fe386e0.tar.gz |
Make sure reading td_runtime in critical section since thread may be
preempted and td_runtime will be modified.
Diffstat (limited to 'sys/kern/kern_time.c')
-rw-r--r-- | sys/kern/kern_time.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/kern/kern_time.c b/sys/kern/kern_time.c index 6df10fa..366da9d 100644 --- a/sys/kern/kern_time.c +++ b/sys/kern/kern_time.c @@ -247,8 +247,9 @@ kern_clock_gettime(struct thread *td, clockid_t clock_id, struct timespec *ats) critical_enter(); switchtime = PCPU_GET(switchtime); curtime = cpu_ticks(); + runtime = td->td_runtime; critical_exit(); - runtime = cputick2usec(td->td_runtime + curtime - switchtime); + runtime = cputick2usec(runtime + curtime - switchtime); ats->tv_sec = runtime / 1000000; ats->tv_nsec = runtime % 1000000 * 1000; break; |