mirror of https://github.com/postgres/postgres
Use signals for postmaster death on FreeBSD.
Use FreeBSD 11.2's new support for detecting parent process death to make PostmasterIsAlive() very cheap, as was done for Linux in an earlier commit. Author: Thomas Munro Discussion: https://postgr.es/m/7261eb39-0369-f2f4-1bb5-62f3b6083b5e@iki.fi
This commit is contained in:
parent
9f09529952
commit
f98b8476cd
|
@ -12494,7 +12494,7 @@ $as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h
|
|||
fi
|
||||
|
||||
|
||||
for ac_header in atomic.h crypt.h dld.h fp_class.h getopt.h ieeefp.h ifaddrs.h langinfo.h mbarrier.h poll.h sys/epoll.h sys/ipc.h sys/prctl.h sys/pstat.h sys/resource.h sys/select.h sys/sem.h sys/shm.h sys/sockio.h sys/tas.h sys/un.h termios.h ucred.h utime.h wchar.h wctype.h
|
||||
for ac_header in atomic.h crypt.h dld.h fp_class.h getopt.h ieeefp.h ifaddrs.h langinfo.h mbarrier.h poll.h sys/epoll.h sys/ipc.h sys/prctl.h sys/procctl.h sys/pstat.h sys/resource.h sys/select.h sys/sem.h sys/shm.h sys/sockio.h sys/tas.h sys/un.h termios.h ucred.h utime.h wchar.h wctype.h
|
||||
do :
|
||||
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
|
||||
|
|
|
@ -1260,7 +1260,7 @@ AC_SUBST(UUID_LIBS)
|
|||
|
||||
AC_HEADER_STDBOOL
|
||||
|
||||
AC_CHECK_HEADERS([atomic.h crypt.h dld.h fp_class.h getopt.h ieeefp.h ifaddrs.h langinfo.h mbarrier.h poll.h sys/epoll.h sys/ipc.h sys/prctl.h sys/pstat.h sys/resource.h sys/select.h sys/sem.h sys/shm.h sys/sockio.h sys/tas.h sys/un.h termios.h ucred.h utime.h wchar.h wctype.h])
|
||||
AC_CHECK_HEADERS([atomic.h crypt.h dld.h fp_class.h getopt.h ieeefp.h ifaddrs.h langinfo.h mbarrier.h poll.h sys/epoll.h sys/ipc.h sys/prctl.h sys/procctl.h sys/pstat.h sys/resource.h sys/select.h sys/sem.h sys/shm.h sys/sockio.h sys/tas.h sys/un.h termios.h ucred.h utime.h wchar.h wctype.h])
|
||||
|
||||
# On BSD, test for net/if.h will fail unless sys/socket.h
|
||||
# is included first.
|
||||
|
|
|
@ -379,6 +379,9 @@ PostmasterDeathSignalInit(void)
|
|||
#if defined(PR_SET_PDEATHSIG)
|
||||
if (prctl(PR_SET_PDEATHSIG, signum) < 0)
|
||||
elog(ERROR, "could not request parent death signal: %m");
|
||||
#elif defined(PROC_PDEATHSIG_CTL)
|
||||
if (procctl(P_PID, 0, PROC_PDEATHSIG_CTL, &signum) < 0)
|
||||
elog(ERROR, "could not request parent death signal: %m");
|
||||
#else
|
||||
#error "USE_POSTMASTER_DEATH_SIGNAL set, but there is no mechanism to request the signal"
|
||||
#endif
|
||||
|
|
|
@ -603,6 +603,9 @@
|
|||
/* Define to 1 if you have the <sys/prctl.h> header file. */
|
||||
#undef HAVE_SYS_PRCTL_H
|
||||
|
||||
/* Define to 1 if you have the <sys/procctl.h> header file. */
|
||||
#undef HAVE_SYS_PROCCTL_H
|
||||
|
||||
/* Define to 1 if you have the <sys/pstat.h> header file. */
|
||||
#undef HAVE_SYS_PSTAT_H
|
||||
|
||||
|
|
|
@ -18,6 +18,10 @@
|
|||
#include "sys/prctl.h"
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_PROCCTL_H
|
||||
#include "sys/procctl.h"
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Reasons for signaling the postmaster. We can cope with simultaneous
|
||||
* signals for different reasons. If the same reason is signaled multiple
|
||||
|
@ -66,7 +70,8 @@ extern void PostmasterDeathSignalInit(void);
|
|||
* the parent dies. Checking the flag first makes PostmasterIsAlive() a lot
|
||||
* cheaper in usual case that the postmaster is alive.
|
||||
*/
|
||||
#if defined(HAVE_SYS_PRCTL_H) && defined(PR_SET_PDEATHSIG)
|
||||
#if (defined(HAVE_SYS_PRCTL_H) && defined(PR_SET_PDEATHSIG)) || \
|
||||
(defined(HAVE_SYS_PROCCTL_H) && defined(PROC_PDEATHSIG_CTL))
|
||||
#define USE_POSTMASTER_DEATH_SIGNAL
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in New Issue