Hello Recently I discovered that renaming processes using setproctitle() call on BSD systems may sometimes cause problems. For instance there is currently a bug in all versions of LLDB which makes it impossible to debug a process that called setproctitle():
https://llvm.org/bugs/show_bug.cgi?id=26924#c3 Since LLVM stack is used by default in FreeBSD I believe it's quite a severe problem. In case there is other software that doesn't handle stproctitle() well and for users of LLDB <= 3.8 (most recent version) I propose to add a --disable-setproctitle flag to configure script. Corresponding patch is attached. -- Best regards, Aleksander Alekseev http://eax.me/
diff --git a/configure b/configure index 24655dc..87e845e 100755 --- a/configure +++ b/configure @@ -819,6 +819,7 @@ with_wal_segsize with_CC enable_depend enable_cassert +enable_setproctitle enable_thread_safety with_tcl with_tclconfig @@ -1485,6 +1486,8 @@ Optional Features: --enable-tap-tests enable TAP tests (requires Perl and IPC::Run) --enable-depend turn on automatic dependency tracking --enable-cassert enable assertion checks (for debugging) + --disable-setproctitle do not use setproctitle() procedure for changing + process name --disable-thread-safety disable thread-safety in client libraries --disable-largefile omit support for large files --disable-float4-byval disable float4 passed by value @@ -5283,6 +5286,47 @@ done IFS=$ac_save_IFS +# +# setproctitle() +# + + +# Check whether --enable-setproctitle was given. +if test "${enable_setproctitle+set}" = set; then : + enableval=$enable_setproctitle; + case $enableval in + yes) + : + ;; + no) + : + ;; + *) + as_fn_error $? "no argument expected for --enable-setproctitle option" "$LINENO" 5 + ;; + esac + +else + enable_setproctitle=yes + +fi + + +# calling setproctitle() makes it impossible to connect to PostgreSQL backend +# using LLDB <= 3.8, see https://llvm.org/bugs/show_bug.cgi?id=26924#c3 +if test "$enable_setproctitle" = yes; then + for ac_func in setproctitle +do : + ac_fn_c_check_func "$LINENO" "setproctitle" "ac_cv_func_setproctitle" +if test "x$ac_cv_func_setproctitle" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SETPROCTITLE 1 +_ACEOF + +fi +done + +fi # # Library directories @@ -12425,7 +12468,7 @@ fi LIBS_including_readline="$LIBS" LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'` -for ac_func in cbrt dlopen fdatasync getifaddrs getpeerucred getrlimit mbstowcs_l memmove poll pstat pthread_is_threaded_np readlink setproctitle setsid shm_open symlink sync_file_range towlower utime utimes wcstombs wcstombs_l +for ac_func in cbrt dlopen fdatasync getifaddrs getpeerucred getrlimit mbstowcs_l memmove poll pstat pthread_is_threaded_np readlink setsid shm_open symlink sync_file_range towlower utime utimes wcstombs wcstombs_l do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" diff --git a/configure.in b/configure.in index c564a76..40daa32 100644 --- a/configure.in +++ b/configure.in @@ -580,6 +579,16 @@ done IFS=$ac_save_IFS AC_SUBST(INCLUDES) +# +# setproctitle() +# +PGAC_ARG_BOOL(enable, setproctitle, yes, + [do not use setproctitle() procedure for changing process name]) +# calling setproctitle() makes it impossible to connect to PostgreSQL backend +# using LLDB <= 3.8, see https://llvm.org/bugs/show_bug.cgi?id=26924#c3 +if test "$enable_setproctitle" = yes; then + AC_CHECK_FUNCS([setproctitle]) +fi # # Library directories @@ -1432,7 +1440,7 @@ PGAC_FUNC_WCSTOMBS_L LIBS_including_readline="$LIBS" LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'` -AC_CHECK_FUNCS([cbrt dlopen fdatasync getifaddrs getpeerucred getrlimit mbstowcs_l memmove poll pstat pthread_is_threaded_np readlink setproctitle setsid shm_open symlink sync_file_range towlower utime utimes wcstombs wcstombs_l]) +AC_CHECK_FUNCS([cbrt dlopen fdatasync getifaddrs getpeerucred getrlimit mbstowcs_l memmove poll pstat pthread_is_threaded_np readlink setsid shm_open symlink sync_file_range towlower utime utimes wcstombs wcstombs_l]) AC_REPLACE_FUNCS(fseeko) case $host_os in
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers