summaryrefslogtreecommitdiff
path: root/kern/thread.c
diff options
context:
space:
mode:
Diffstat (limited to 'kern/thread.c')
-rw-r--r--kern/thread.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/kern/thread.c b/kern/thread.c
index 392d38f8..20c11024 100644
--- a/kern/thread.c
+++ b/kern/thread.c
@@ -1501,11 +1501,12 @@ kern_return_t thread_info(
if (flavor == THREAD_BASIC_INFO) {
thread_basic_info_t basic_info;
- /* Allow *thread_info_count to be one smaller than the
- usual amount, because creation_time is a new member
- that some callers might not know about. */
+ /* Allow *thread_info_count to be smaller than the provided amount
+ * that does not contain the new time_value64_t fields as some
+ * callers might not know about them yet. */
- if (*thread_info_count < THREAD_BASIC_INFO_COUNT - 1)
+ if (*thread_info_count <
+ THREAD_BASIC_INFO_COUNT - 3 * sizeof(time_value64_t)/sizeof(natural_t))
return KERN_INVALID_ARGUMENT;
basic_info = (thread_basic_info_t) thread_info_out;
@@ -1533,6 +1534,13 @@ kern_return_t thread_info(
read_time_stamp(&thread->creation_time, &creation_time);
TIME_VALUE64_TO_TIME_VALUE(&creation_time, &basic_info->creation_time);
+ if (*thread_info_count == THREAD_BASIC_INFO_COUNT) {
+ /* Copy new time_value64_t fields */
+ basic_info->user_time64 = user_time;
+ basic_info->system_time64 = user_time;
+ basic_info->creation_time64 = creation_time;
+ }
+
/*
* To calculate cpu_usage, first correct for timer rate,
* then for 5/8 ageing. The correction factor [3/5] is