From 76aa1f9c486af2393fbf66cd853f320b20b20a0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net> Date: Sat, 25 Mar 2000 15:43:25 -0800 Subject: [PATCH] RUSAGE_THROUGH_PROCFS should now work on Tru64 Rev: src/acconfig.h:1.55 Rev: src/configure.in:1.351 Rev: src/rusage.c:1.12 --- src/acconfig.h | 5 ++++- src/configure.in | 41 ++++++++++++++++++++++++++++++++++++++--- src/rusage.c | 11 ++++++++++- 3 files changed, 52 insertions(+), 5 deletions(-) diff --git a/src/acconfig.h b/src/acconfig.h index 4c892caf9f..e8173d2e36 100644 --- a/src/acconfig.h +++ b/src/acconfig.h @@ -1,5 +1,5 @@ /* - * $Id: acconfig.h,v 1.54 2000/03/04 16:24:37 grubba Exp $ + * $Id: acconfig.h,v 1.55 2000/03/25 23:43:25 hubbe Exp $ */ #ifndef MACHINE_H #define MACHINE_H @@ -110,6 +110,9 @@ /* Solaris has rusage as an ioctl on procfs */ #undef GETRUSAGE_THROUGH_PROCFS +/* So has True64, but no useful information in prstatus_t */ +#undef GETRUSAGE_THROUGH_PROCFS_PRS + /* Define if you have fork */ #undef HAVE_FORK diff --git a/src/configure.in b/src/configure.in index 0012789c61..cd4a3b0ff9 100644 --- a/src/configure.in +++ b/src/configure.in @@ -1,4 +1,4 @@ -AC_REVISION("$Id: configure.in,v 1.350 2000/03/22 00:55:36 hubbe Exp $") +AC_REVISION("$Id: configure.in,v 1.351 2000/03/25 23:43:25 hubbe Exp $") AC_INIT(interpret.c) AC_CONFIG_HEADER(machine.h) @@ -2898,12 +2898,10 @@ int proc_fd; long tmp; char proc_name[20]; prusage_t pru; -prstatus_t prs; ],[ sprintf(proc_name, "/proc/%05d", getpid()); proc_fd = open(proc_name, O_RDONLY); ioctl(proc_fd, PIOCUSAGE, &pru); - ioctl(proc_fd, PIOCSTATUS, &prs); tmp=pru.pr_utime.tv_sec; ], pike_cv_getrusage_procfs=yes @@ -2922,6 +2920,43 @@ fi ############################################################################# +if test "$ac_cv_getrusage_procfs" = "yes"; then + AC_MSG_CHECKING(prstatus_t contains pr_brksize and pr_stksize) + AC_CACHE_VAL(pike_cv_getrusage_procfs_prs, [ + AC_TRY_COMPILE([ +#ifndef _LARGEFILE_SOURCE +# define _FILE_OFFSET_BITS 64 +# define _LARGEFILE_SOURCE +# define _LARGEFILE64_SOURCE 1 +#endif +#include <sys/procfs.h> +#include <sys/fcntl.h> +int proc_fd; +long tmp; +char proc_name[20]; +prstatus_t prs; + ],[ + sprintf(proc_name, "/proc/%05d", getpid()); + proc_fd = open(proc_name, O_RDONLY); + ioctl(proc_fd, PIOCSTATUS, &prs); + tmp=prs.pr_brksize + prs.pr_stksize; + ], + pike_cv_getrusage_procfs_prs=yes + , + pike_cv_getrusage_procfs_prs=no + ) + ]) + + if test "$pike_cv_getrusage_procfs_prs" = yes; then + AC_MSG_RESULT(yes) + AC_DEFINE(GETRUSAGE_THROUGH_PROCFS_PRS) + else + AC_MSG_RESULT(no) + fi +fi + +############################################################################# + AC_MSG_CHECKING(for isgraph) AC_CACHE_VAL(pike_cv_func_isgraph, [ AC_TRY_LINK([ #include <ctype.h> diff --git a/src/rusage.c b/src/rusage.c index 06cf90eb86..aa738c8da8 100644 --- a/src/rusage.c +++ b/src/rusage.c @@ -13,7 +13,7 @@ #include <errno.h> #include "rusage.h" -RCSID("$Id: rusage.c,v 1.11 1998/06/10 19:23:30 hubbe Exp $"); +RCSID("$Id: rusage.c,v 1.12 2000/03/25 23:43:25 hubbe Exp $"); #ifdef HAVE_SYS_TIMES_H #include <sys/times.h> @@ -45,7 +45,9 @@ int proc_fd = -1; INT32 *low_rusage(void) { prusage_t pru; +#ifdef GETRUSAGE_THROUGH_PROCFS_PRS prstatus_t prs; +#endif while(proc_fd < 0) { @@ -67,6 +69,7 @@ INT32 *low_rusage(void) return 0; } +#ifdef GETRUSAGE_THROUGH_PROCFS_PRS while(ioctl(proc_fd, PIOCSTATUS, &prs) < 0) { if(errno == EINTR) @@ -74,6 +77,7 @@ INT32 *low_rusage(void) return 0; } +#endif rusage_values[0] = get_time_int(&pru.pr_utime); /* user time */ rusage_values[1] = get_time_int(&pru.pr_stime); /* system time */ @@ -102,8 +106,13 @@ INT32 *low_rusage(void) rusage_values[24] = get_time_int(&pru.pr_slptime); rusage_values[25] = get_time_int(&pru.pr_wtime); rusage_values[26] = get_time_int(&pru.pr_stoptime); +#ifdef GETRUSAGE_THROUGH_PROCFS_PRS rusage_values[27] = prs.pr_brksize; rusage_values[28] = prs.pr_stksize; +#else + rusage_values[27] = 0; + rusage_values[28] = 0; +#endif return & rusage_values[0]; } -- GitLab