diff --git a/configure b/configure index 6651321208..52bcb9d498 100755 --- a/configure +++ b/configure @@ -16797,19 +16797,6 @@ esac fi -ac_fn_c_check_func "$LINENO" "getrusage" "ac_cv_func_getrusage" -if test "x$ac_cv_func_getrusage" = xyes; then : - $as_echo "#define HAVE_GETRUSAGE 1" >>confdefs.h - -else - case " $LIBOBJS " in - *" getrusage.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS getrusage.$ac_objext" - ;; -esac - -fi - ac_fn_c_check_func "$LINENO" "inet_aton" "ac_cv_func_inet_aton" if test "x$ac_cv_func_inet_aton" = xyes; then : $as_echo "#define HAVE_INET_ATON 1" >>confdefs.h @@ -17125,6 +17112,12 @@ esac ;; esac + case " $LIBOBJS " in + *" getrusage.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS getrusage.$ac_objext" + ;; +esac + case " $LIBOBJS " in *" kill.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS kill.$ac_objext" diff --git a/configure.ac b/configure.ac index 1e92fd6abd..9a3483f206 100644 --- a/configure.ac +++ b/configure.ac @@ -1911,7 +1911,6 @@ AC_REPLACE_FUNCS(m4_normalize([ explicit_bzero getopt getpeereid - getrusage inet_aton link mkdtemp @@ -1986,6 +1985,7 @@ if test "$PORTNAME" = "win32"; then AC_REPLACE_FUNCS(gettimeofday) AC_LIBOBJ(dirmod) AC_LIBOBJ(fdatasync) + AC_LIBOBJ(getrusage) AC_LIBOBJ(kill) AC_LIBOBJ(open) AC_LIBOBJ(system) diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 8ba1c170f0..bdb11f430f 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -32,7 +32,7 @@ #include #endif -#ifndef HAVE_GETRUSAGE +#ifdef WIN32 #include "rusagestub.h" #endif @@ -4860,7 +4860,14 @@ ShowUsage(const char *title) (long) user.tv_usec, (long) sys.tv_sec, (long) sys.tv_usec); -#if defined(HAVE_GETRUSAGE) +#ifndef WIN32 + + /* + * The following rusage fields are not defined by POSIX, but they're + * present on all current Unix-like systems so we use them without any + * special checks. Some of these could be provided in our Windows + * emulation in src/port/getrusage.c with more work. + */ appendStringInfo(&str, "!\t%ld kB max resident size\n", #if defined(__darwin__) @@ -4896,7 +4903,7 @@ ShowUsage(const char *title) r.ru_nvcsw - Save_r.ru_nvcsw, r.ru_nivcsw - Save_r.ru_nivcsw, r.ru_nvcsw, r.ru_nivcsw); -#endif /* HAVE_GETRUSAGE */ +#endif /* !WIN32 */ /* remove trailing newline */ if (str.data[str.len - 1] == '\n') diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index 000ed9bde2..9061f301b0 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -250,9 +250,6 @@ /* Define to 1 if you have the `getrlimit' function. */ #undef HAVE_GETRLIMIT -/* Define to 1 if you have the `getrusage' function. */ -#undef HAVE_GETRUSAGE - /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY diff --git a/src/include/rusagestub.h b/src/include/rusagestub.h index b887effa3e..be26f849a5 100644 --- a/src/include/rusagestub.h +++ b/src/include/rusagestub.h @@ -15,9 +15,6 @@ #define RUSAGESTUB_H #include /* for struct timeval */ -#ifndef WIN32 -#include /* for struct tms */ -#endif #include /* for CLK_TCK */ #define RUSAGE_SELF 0 diff --git a/src/port/getrusage.c b/src/port/getrusage.c index 02665f4032..2ba59ade2c 100644 --- a/src/port/getrusage.c +++ b/src/port/getrusage.c @@ -17,19 +17,14 @@ #include "rusagestub.h" -/* This code works on: - * solaris_i386 - * solaris_sparc - * win32 - * which currently is all the supported platforms that don't have a - * native version of getrusage(). So, if configure decides to compile - * this file at all, we just use this version unconditionally. +/* + * This code works on Windows, which is the only supported platform without a + * native version of getrusage(). */ int getrusage(int who, struct rusage *rusage) { -#ifdef WIN32 FILETIME starttime; FILETIME exittime; FILETIME kerneltime; @@ -66,44 +61,6 @@ getrusage(int who, struct rusage *rusage) li.QuadPart /= 10L; /* Convert to microseconds */ rusage->ru_utime.tv_sec = li.QuadPart / 1000000L; rusage->ru_utime.tv_usec = li.QuadPart % 1000000L; -#else /* all but WIN32 */ - - struct tms tms; - int tick_rate = CLK_TCK; /* ticks per second */ - clock_t u, - s; - - if (rusage == (struct rusage *) NULL) - { - errno = EFAULT; - return -1; - } - if (times(&tms) < 0) - { - /* errno set by times */ - return -1; - } - switch (who) - { - case RUSAGE_SELF: - u = tms.tms_utime; - s = tms.tms_stime; - break; - case RUSAGE_CHILDREN: - u = tms.tms_cutime; - s = tms.tms_cstime; - break; - default: - errno = EINVAL; - return -1; - } -#define TICK_TO_SEC(T, RATE) ((T)/(RATE)) -#define TICK_TO_USEC(T,RATE) (((T)%(RATE)*1000000)/RATE) - rusage->ru_utime.tv_sec = TICK_TO_SEC(u, tick_rate); - rusage->ru_utime.tv_usec = TICK_TO_USEC(u, tick_rate); - rusage->ru_stime.tv_sec = TICK_TO_SEC(s, tick_rate); - rusage->ru_stime.tv_usec = TICK_TO_USEC(u, tick_rate); -#endif /* WIN32 */ return 0; } diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index f8df6acabe..5fa8626af7 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -277,7 +277,6 @@ sub GenerateFiles HAVE_GETPEERUCRED => undef, HAVE_GETPWUID_R => undef, HAVE_GETRLIMIT => undef, - HAVE_GETRUSAGE => undef, HAVE_GETTIMEOFDAY => undef, HAVE_GSSAPI_GSSAPI_H => undef, HAVE_GSSAPI_H => undef,