Hi, Here's some archeology I did a while back, but was reminded to post when I saw David's nearby performance improvements for ps_status.c.
* there are no systems with HAVE_PS_STRINGS (ancient BSD) * setproctitle_fast() is in all live FreeBSD releases * setproctitle() is in all other BSDs * PostgreSQL can't run on GNU/Hurd apparently, for lack of shared sempahores, so who would even know if that works? * IRIX is rusting in peace * there are no other NeXT-derived systems (NeXTSTEP and OPENSTEP are departed) Therefore I think it is safe to drop the PS_USE_PS_STRING and PS_USE_CHANGE_ARGV code branches, remove a bunch of outdated comments and macro tests, and prune the defunct configure/meson probe. I guess (defined(sun) && !defined(BSD)) || defined(__svr5__) could be changed to just defined(sun) (surely there are no other living SysV-derived systems, and I think non-BSD Sun probably meant "Solaris but not SunOS"), but I don't know so I didn't touch that. I think the history here is that the ancient BSD sendmail code (conf.c) had all this stuff for BSD and SVR5 systems, but then its setproctitle() function actually moved into the OS so that the underlying PS_STRINGS stuff wouldn't have to be stable, and indeed it was not.
From fdca29db1140aac55f9b07d63bf5cdc7555454da Mon Sep 17 00:00:00 2001 From: Thomas Munro <thomas.mu...@gmail.com> Date: Thu, 16 Feb 2023 15:48:50 +1300 Subject: [PATCH] Remove obsolete code from ps_status.c. We can now remove various code, comments and configure/meson probes for ancient BSD variants, GNU/Hurd, IRIX, NeXT. --- configure | 35 ------------------- configure.ac | 13 ------- meson.build | 17 --------- src/backend/utils/misc/ps_status.c | 55 +++++------------------------- src/include/pg_config.h.in | 3 -- 5 files changed, 9 insertions(+), 114 deletions(-) diff --git a/configure b/configure index 7bb829ddf4..e35769ea73 100755 --- a/configure +++ b/configure @@ -16278,41 +16278,6 @@ cat >>confdefs.h <<_ACEOF _ACEOF -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PS_STRINGS" >&5 -$as_echo_n "checking for PS_STRINGS... " >&6; } -if ${pgac_cv_var_PS_STRINGS+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <machine/vmparam.h> -#include <sys/exec.h> - -int -main () -{ -PS_STRINGS->ps_nargvstr = 1; -PS_STRINGS->ps_argvstr = "foo"; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - pgac_cv_var_PS_STRINGS=yes -else - pgac_cv_var_PS_STRINGS=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_var_PS_STRINGS" >&5 -$as_echo "$pgac_cv_var_PS_STRINGS" >&6; } -if test "$pgac_cv_var_PS_STRINGS" = yes ; then - -$as_echo "#define HAVE_PS_STRINGS 1" >>confdefs.h - -fi - ac_fn_c_check_func "$LINENO" "explicit_bzero" "ac_cv_func_explicit_bzero" if test "x$ac_cv_func_explicit_bzero" = xyes; then : $as_echo "#define HAVE_EXPLICIT_BZERO 1" >>confdefs.h diff --git a/configure.ac b/configure.ac index 137a40a942..af23c15cb2 100644 --- a/configure.ac +++ b/configure.ac @@ -1849,19 +1849,6 @@ AC_CHECK_DECLS([pwritev], [], [AC_LIBOBJ(pwritev)], [#include <sys/uio.h>]) # This is probably only present on macOS, but may as well check always AC_CHECK_DECLS(F_FULLFSYNC, [], [], [#include <fcntl.h>]) -AC_CACHE_CHECK([for PS_STRINGS], [pgac_cv_var_PS_STRINGS], -[AC_LINK_IFELSE([AC_LANG_PROGRAM( -[#include <machine/vmparam.h> -#include <sys/exec.h> -], -[PS_STRINGS->ps_nargvstr = 1; -PS_STRINGS->ps_argvstr = "foo";])], -[pgac_cv_var_PS_STRINGS=yes], -[pgac_cv_var_PS_STRINGS=no])]) -if test "$pgac_cv_var_PS_STRINGS" = yes ; then - AC_DEFINE([HAVE_PS_STRINGS], 1, [Define to 1 if the PS_STRINGS thing exists.]) -fi - AC_REPLACE_FUNCS(m4_normalize([ explicit_bzero getopt diff --git a/meson.build b/meson.build index b5daed9f38..f534704452 100644 --- a/meson.build +++ b/meson.build @@ -2293,23 +2293,6 @@ endif cdata.set('pg_restrict', '__restrict') -if cc.links(''' -#include <machine/vmparam.h> -#include <sys/exec.h> - -int main(void) -{ - PS_STRINGS->ps_nargvstr = 1; - PS_STRINGS->ps_argvstr = "foo"; -} -''', - name: 'PS_STRINGS', args: test_c_args) - cdata.set('HAVE_PS_STRINGS', 1) -else - cdata.set('HAVE_PS_STRINGS', false) -endif - - # Most libraries are included only if they demonstrably provide a function we # need, but libm is an exception: always include it, because there are too # many compilers that play cute optimization games that will break probes for diff --git a/src/backend/utils/misc/ps_status.c b/src/backend/utils/misc/ps_status.c index 06bdc2afd1..d6a3389c29 100644 --- a/src/backend/utils/misc/ps_status.c +++ b/src/backend/utils/misc/ps_status.c @@ -15,10 +15,6 @@ #include "postgres.h" #include <unistd.h> -#ifdef HAVE_PS_STRINGS -#include <machine/vmparam.h> /* for old BSD */ -#include <sys/exec.h> -#endif #if defined(__darwin__) #include <crt_externs.h> #endif @@ -39,16 +35,10 @@ bool update_process_title = DEFAULT_UPDATE_PROCESS_TITLE; * * PS_USE_SETPROCTITLE_FAST * use the function setproctitle_fast(const char *, ...) - * (newer FreeBSD systems) + * (FreeBSD) * PS_USE_SETPROCTITLE * use the function setproctitle(const char *, ...) - * (newer BSD systems) - * PS_USE_PS_STRINGS - * assign PS_STRINGS->ps_argvstr = "string" - * (some BSD systems) - * PS_USE_CHANGE_ARGV - * assign argv[0] = "string" - * (some other BSD systems) + * (other BSDs) * PS_USE_CLOBBER_ARGV * write over the argv and environment area * (Linux and most SysV-like systems) @@ -62,11 +52,7 @@ bool update_process_title = DEFAULT_UPDATE_PROCESS_TITLE; #define PS_USE_SETPROCTITLE_FAST #elif defined(HAVE_SETPROCTITLE) #define PS_USE_SETPROCTITLE -#elif defined(HAVE_PS_STRINGS) -#define PS_USE_PS_STRINGS -#elif (defined(BSD) || defined(__hurd__)) && !defined(__darwin__) -#define PS_USE_CHANGE_ARGV -#elif defined(__linux__) || defined(_AIX) || defined(__sgi) || (defined(sun) && !defined(BSD)) || defined(__svr5__) || defined(__darwin__) +#elif defined(__linux__) || defined(_AIX) || (defined(sun) && !defined(BSD)) || defined(__svr5__) || defined(__darwin__) #define PS_USE_CLOBBER_ARGV #elif defined(WIN32) #define PS_USE_WIN32 @@ -186,9 +172,6 @@ save_ps_display_args(int argc, char **argv) new_environ[i] = NULL; environ = new_environ; } -#endif /* PS_USE_CLOBBER_ARGV */ - -#if defined(PS_USE_CHANGE_ARGV) || defined(PS_USE_CLOBBER_ARGV) /* * If we're going to change the original argv[] then make a copy for @@ -226,15 +209,15 @@ save_ps_display_args(int argc, char **argv) #if defined(__darwin__) /* - * macOS (and perhaps other NeXT-derived platforms?) has a static copy - * of the argv pointer, which we may fix like so: + * macOS has a static copy of the argv pointer, which we may fix like + * so: */ *_NSGetArgv() = new_argv; #endif argv = new_argv; } -#endif /* PS_USE_CHANGE_ARGV or PS_USE_CLOBBER_ARGV */ +#endif /* PS_USE_CLOBBER_ARGV */ return argv; } @@ -271,25 +254,10 @@ init_ps_display(const char *fixed_part) /* If ps_buffer is a pointer, it might still be null */ if (!ps_buffer) return; -#endif - - /* - * Overwrite argv[] to point at appropriate space, if needed - */ -#ifdef PS_USE_CHANGE_ARGV - save_argv[0] = ps_buffer; - save_argv[1] = NULL; -#endif /* PS_USE_CHANGE_ARGV */ - -#ifdef PS_USE_CLOBBER_ARGV - { - int i; - - /* make extra argv slots point at end_of_area (a NUL) */ - for (i = 1; i < save_argc; i++) - save_argv[i] = ps_buffer + ps_buffer_size; - } + /* make extra argv slots point at end_of_area (a NUL) */ + for (int i = 1; i < save_argc; i++) + save_argv[i] = ps_buffer + ps_buffer_size; #endif /* PS_USE_CLOBBER_ARGV */ /* @@ -369,11 +337,6 @@ set_ps_display(const char *activity) setproctitle_fast("%s", ps_buffer); #endif -#ifdef PS_USE_PS_STRINGS - PS_STRINGS->ps_nargvstr = 1; - PS_STRINGS->ps_argvstr = ps_buffer; -#endif /* PS_USE_PS_STRINGS */ - #ifdef PS_USE_CLOBBER_ARGV /* pad unused memory; need only clobber remainder of old status string */ if (last_status_len > ps_buffer_cur_len) diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index 2490bf8ace..20c82f5979 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -334,9 +334,6 @@ /* Define to 1 if you have the `ppoll' function. */ #undef HAVE_PPOLL -/* Define to 1 if the PS_STRINGS thing exists. */ -#undef HAVE_PS_STRINGS - /* Define if you have POSIX threads libraries and header files. */ #undef HAVE_PTHREAD -- 2.39.1