From bde01c31c63ae98b61d3976d21d2645c88fb0e8c Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Sun, 5 Aug 2001 20:39:59 +0000 Subject: 2001-08-04 Roland McGrath * sysdeps/mach/hurd/getrusage.c: Use TASK_EVENTS_INFO if implemented by the microkernel (which it's not). --- sysdeps/mach/hurd/getrusage.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'sysdeps/mach') 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: -- cgit v1.2.3