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