summaryrefslogtreecommitdiff
path: root/sysdeps/mach/hurd/getrusage.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2001-08-05 20:39:59 +0000
committerRoland McGrath <roland@gnu.org>2001-08-05 20:39:59 +0000
commitbde01c31c63ae98b61d3976d21d2645c88fb0e8c (patch)
tree4b3613648a746aba61f9bb576be75a28821b27d2 /sysdeps/mach/hurd/getrusage.c
parent3d759cb8d32614667f58688899fd193926dcf73d (diff)
2001-08-04 Roland McGrath <roland@frob.com>
* sysdeps/mach/hurd/getrusage.c: Use TASK_EVENTS_INFO if implemented by the microkernel (which it's not).
Diffstat (limited to 'sysdeps/mach/hurd/getrusage.c')
-rw-r--r--sysdeps/mach/hurd/getrusage.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/sysdeps/mach/hurd/getrusage.c b/sysdeps/mach/hurd/getrusage.c
index 970e1169c6..373486ffc2 100644
--- a/sysdeps/mach/hurd/getrusage.c
+++ b/sysdeps/mach/hurd/getrusage.c
@@ -1,5 +1,5 @@
/* getrusage -- Get resource usage information about processes. Hurd version.
- Copyright (C) 1999 Free Software Foundation, Inc.
+ Copyright (C) 1999,2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -32,6 +32,7 @@ __getrusage (who, usage)
struct rusage *usage;
{
struct task_basic_info bi;
+ struct task_events_info ei;
struct task_thread_times_info tti;
mach_msg_type_number_t count;
error_t err;
@@ -45,6 +46,14 @@ __getrusage (who, usage)
if (err)
return __hurd_fail (err);
+ count = TASK_EVENTS_INFO_COUNT;
+ err = __task_info (__mach_task_self (), TASK_EVENTS_INFO,
+ (task_info_t) &ei, &count);
+ if (err == KERN_INVALID_ARGUMENT) /* microkernel doesn't implement it */
+ memset (&ei, 0, sizeof ei);
+ else if (err)
+ return __hurd_fail (err);
+
count = TASK_THREAD_TIMES_INFO_COUNT;
err = __task_info (__mach_task_self (), TASK_THREAD_TIMES_INFO,
(task_info_t) &tti, &count);
@@ -61,6 +70,11 @@ __getrusage (who, usage)
usage->ru_stime.tv_sec = bi.system_time.seconds;
usage->ru_stime.tv_usec = bi.system_time.microseconds;
+ /* These statistics map only approximately. */
+ usage->ru_majflt = ei.pageins;
+ usage->ru_minflt = ei.faults - ei.pageins;
+ usage->ru_msgsnd = ei.messages_sent; /* Mach IPC, not SysV IPC */
+ usage->ru_msgrcv = ei.messages_received; /* Mach IPC, not SysV IPC */
break;
case RUSAGE_CHILDREN: