From 7ad9a526dd69018bf22b570e847fdfd0ca185bd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?= <grubba@grubba.org> Date: Fri, 9 Nov 2018 12:22:38 +0100 Subject: [PATCH] Core: Do not use the obsolete (~20 years) ioctl /proc API. The ioctl-based /proc API was obsoleted in Solaris 2.6 (July 1997), but to be supported "until the next major release". In Solaris 11.4 (August 2018) the support has now finally been removed. Most of the removed code was from 1995, and was thus older than Pike... --- src/acconfig.h | 9 ---- src/configure.in | 78 ------------------------------ src/rusage.c | 120 +---------------------------------------------- 3 files changed, 1 insertion(+), 206 deletions(-) diff --git a/src/acconfig.h b/src/acconfig.h index e2a924e152..0257e9540f 100644 --- a/src/acconfig.h +++ b/src/acconfig.h @@ -235,15 +235,6 @@ /* If so, is it restricted to user and system time? */ #undef GETRUSAGE_RESTRICTED -/* 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 infnan */ -#undef HAVE_INFNAN - /* Define if you have _isnan */ #undef HAVE__ISNAN diff --git a/src/configure.in b/src/configure.in index 422689804b..fbfa6c032e 100644 --- a/src/configure.in +++ b/src/configure.in @@ -6379,84 +6379,6 @@ else AC_DEFINE(GETRUSAGE_RESTRICTED) fi -######################################################################## -# -# IRIX also has procfs support, but it it different, a separate test -# should be made. /Hubbe -# - -if test "$ac_cv_header_sys_procfs_h" = "yes"; then - AC_MSG_CHECKING(getrusage() through procfs) - AC_CACHE_VAL(pike_cv_getrusage_procfs, [ - 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]; -prusage_t pru; - ],[ - sprintf(proc_name, "/proc/%05d", getpid()); - proc_fd = open(proc_name, O_RDONLY); - ioctl(proc_fd, PIOCUSAGE, &pru); - tmp=pru.pr_utime.tv_sec; - ], - pike_cv_getrusage_procfs=yes - , - pike_cv_getrusage_procfs=no - ) - ]) - - if test "$pike_cv_getrusage_procfs" = yes; then - AC_MSG_RESULT(yes) - AC_DEFINE(GETRUSAGE_THROUGH_PROCFS) - else - AC_MSG_RESULT(no) - fi -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 - ############################################################################# # # __func__ is new in ISO C 9x diff --git a/src/rusage.c b/src/rusage.c index d0e8b873ed..6de7593664 100644 --- a/src/rusage.c +++ b/src/rusage.c @@ -137,99 +137,6 @@ PMOD_EXPORT int pike_get_rusage(pike_rusage_t rusage_values) } #else /* __NT__ */ -#ifdef GETRUSAGE_THROUGH_PROCFS -#include <sys/procfs.h> -#ifndef CONFIGURE_TEST -#include "fd_control.h" -#endif - -static INLINE long get_time_int(timestruc_t * val) -{ - return val->tv_sec * 1000L + val->tv_nsec / 1000000; -} - -static int proc_fd = -1; - -static int open_proc_fd() -{ - do { - char proc_name[30]; - sprintf(proc_name, "/proc/%05ld", (long)getpid()); - proc_fd = open(proc_name, O_RDONLY); - if(proc_fd >= 0) break; - if(errno != EINTR) return 0; - } while(proc_fd < 0); - -#ifndef CONFIGURE_TEST - set_close_on_exec(proc_fd, 1); -#endif - - return 1; -} - -PMOD_EXPORT int pike_get_rusage(pike_rusage_t rusage_values) -{ - prusage_t pru; -#ifdef GETRUSAGE_THROUGH_PROCFS_PRS - prstatus_t prs; -#endif - memset(rusage_values, 0, sizeof(pike_rusage_t)); - - if (proc_fd < 0 && !open_proc_fd()) return 0; - while(ioctl(proc_fd, PIOCUSAGE, &pru) < 0) - { - if(errno == EINTR) - continue; - - return 0; - } - -#ifdef GETRUSAGE_THROUGH_PROCFS_PRS - while(ioctl(proc_fd, PIOCSTATUS, &prs) < 0) - { - if(errno == EINTR) - continue; - - 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 */ - rusage_values[2] = 0; /* maxrss */ - rusage_values[3] = 0; /* ixrss */ - rusage_values[4] = 0; /* idrss */ - rusage_values[5] = 0; /* isrss */ - rusage_values[6] = pru.pr_minf; /* minor pagefaults */ - rusage_values[7] = pru.pr_majf; /* major pagefaults */ - rusage_values[8] = pru.pr_nswap; /* swaps */ - rusage_values[9] = pru.pr_inblk; /* block input op. */ - rusage_values[10] = pru.pr_oublk; /* block outout op. */ - rusage_values[11] = pru.pr_msnd; /* messages sent */ - rusage_values[12] = pru.pr_mrcv; /* messages received */ - rusage_values[13] = pru.pr_sigs; /* signals received */ - rusage_values[14] = pru.pr_vctx; /* voluntary context switches */ - rusage_values[15] = pru.pr_ictx; /* involuntary " " */ - rusage_values[16] = pru.pr_sysc; /* system calls */ - rusage_values[17] = pru.pr_ioch; /* chars read and written */ - rusage_values[18] = get_time_int(&pru.pr_rtime); /* total lwp real (elapsed) time */ - rusage_values[19] = get_time_int(&pru.pr_ttime); /* other system trap CPU time */ - rusage_values[20] = get_time_int(&pru.pr_tftime); /* text page fault sleep time */ - rusage_values[21] = get_time_int(&pru.pr_dftime); /* data page fault sleep time */ - rusage_values[22] = get_time_int(&pru.pr_kftime); /* kernel page fault sleep time */ - rusage_values[23] = get_time_int(&pru.pr_ltime); /* user lock wait sleep time */ - rusage_values[24] = get_time_int(&pru.pr_slptime); /* all other sleep time */ - rusage_values[25] = get_time_int(&pru.pr_wtime); /* wait-cpu (latency) time */ - rusage_values[26] = get_time_int(&pru.pr_stoptime); /* stopped time */ -#ifdef GETRUSAGE_THROUGH_PROCFS_PRS - rusage_values[27] = prs.pr_brksize; - rusage_values[28] = prs.pr_stksize; -#endif - - return 1; -} - -#else /* GETRUSAGE_THROUGH_PROCFS */ #ifdef HAVE_GETRUSAGE #include <sys/resource.h> #ifdef HAVE_SYS_RUSAGE @@ -319,7 +226,6 @@ PMOD_EXPORT int pike_get_rusage(pike_rusage_t rusage_values) #endif /* HAVE_TIMES */ #endif /* HAVE_GETRUSAGE */ -#endif /* GETRUSAGE_THROUGH_PROCFS */ #endif /* __NT__ */ /* @@ -584,31 +490,7 @@ PMOD_EXPORT cpu_time_t fallback_grt (void) #else /* !__NT__ && !HAVE_WORKING_GETHRVTIME */ #ifdef DEFINE_FALLBACK_GCT -#if defined (GETRUSAGE_THROUGH_PROCFS) - -PMOD_EXPORT const char fallback_gct_impl[] = "/proc/"; - -PMOD_EXPORT cpu_time_t fallback_gct (void) -{ - prstatus_t prs; - - if (proc_fd < 0 && !open_proc_fd()) return (cpu_time_t) -1; - while(ioctl(proc_fd, PIOCSTATUS, &prs) < 0) - { - if(errno == EINTR) - continue; - - return (cpu_time_t) -1; - } - - return - prs.pr_utime.tv_sec * CPU_TIME_TICKS + - NSEC_TO_CPU_TIME_T (prs.pr_utime.tv_nsec) + - prs.pr_stime.tv_sec * CPU_TIME_TICKS + - NSEC_TO_CPU_TIME_T (prs.pr_stime.tv_nsec); -} - -#elif defined (HAVE_THREAD_INFO) +#ifdef HAVE_THREAD_INFO /* Mach */ -- GitLab