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).
This commit is contained in:
Roland McGrath 2001-08-05 20:39:59 +00:00
parent 3d759cb8d3
commit bde01c31c6

View file

@ -1,5 +1,5 @@
/* getrusage -- Get resource usage information about processes. Hurd version. /* 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -32,6 +32,7 @@ __getrusage (who, usage)
struct rusage *usage; struct rusage *usage;
{ {
struct task_basic_info bi; struct task_basic_info bi;
struct task_events_info ei;
struct task_thread_times_info tti; struct task_thread_times_info tti;
mach_msg_type_number_t count; mach_msg_type_number_t count;
error_t err; error_t err;
@ -45,6 +46,14 @@ __getrusage (who, usage)
if (err) if (err)
return __hurd_fail (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; count = TASK_THREAD_TIMES_INFO_COUNT;
err = __task_info (__mach_task_self (), TASK_THREAD_TIMES_INFO, err = __task_info (__mach_task_self (), TASK_THREAD_TIMES_INFO,
(task_info_t) &tti, &count); (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_sec = bi.system_time.seconds;
usage->ru_stime.tv_usec = bi.system_time.microseconds; 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; break;
case RUSAGE_CHILDREN: case RUSAGE_CHILDREN: