diff options
author | Roland McGrath <roland@gnu.org> | 2001-08-05 20:39:59 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2001-08-05 20:39:59 +0000 |
commit | bde01c31c63ae98b61d3976d21d2645c88fb0e8c (patch) | |
tree | 4b3613648a746aba61f9bb576be75a28821b27d2 /sysdeps | |
parent | 3d759cb8d32614667f58688899fd193926dcf73d (diff) | |
download | glibc-bde01c31c63ae98b61d3976d21d2645c88fb0e8c.tar.gz |
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')
-rw-r--r-- | sysdeps/mach/hurd/getrusage.c | 16 |
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: |