postgres.git / summary / log / commit / refs
commit fc3f4453a2bc95549682e23600b22e658cb2d6d7
Author: Andres Freund <andres@anarazel.de>
Date: Mon Apr 06 01:23:30 2020 +0000
Recompute stack base in forked postmaster children.
This is for the benefit of running postgres under the rr
debugger. When using rr signal handlers running while a syscall is
active use an alternative stack. As e.g. bgworkers are started from
within signal handlers, the forked backend then has a different stack
base than postmaster. Previously that subsequently lead to those
processes triggering spurious "stack depth limit exceeded" errors.
Discussion: https://postgr.es/m/20200327182217.ubrrl32lyfhxfwk5@alap3.anarazel.de
src/backend/postmaster/postmaster.c | 5 -----
src/backend/utils/init/miscinit.c | 9 +++++++++
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 73d278f3b2c..0578e92ba9c 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -4900,11 +4900,6 @@ SubPostmasterMain(int argc, char *argv[])
/* Close the postmaster's sockets (as soon as we know them) */
ClosePostmasterPorts(strcmp(argv[1], "--forklog") == 0);
- /*
- * Set reference point for stack-depth checking
- */
- set_stack_base();
-
/*
* Set up memory area for GSS information. Mirrors the code in ConnCreate
* for the non-exec case.
diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c
index a7b7b12249d..6fe25c023a4 100644
--- a/src/backend/utils/init/miscinit.c
+++ b/src/backend/utils/init/miscinit.c
@@ -92,6 +92,15 @@ InitPostmasterChild(void)
{
IsUnderPostmaster = true; /* we are a postmaster subprocess now */
+ /*
+ * Set reference point for stack-depth checking. We re-do that even in the
+ * !EXEC_BACKEND case, because there are some edge cases where processes
+ * are started with an alternative stack (e.g. starting bgworkers when
+ * running postgres using the rr debugger, as bgworkers are launched from
+ * signal handlers).
+ */
+ set_stack_base();
+
InitProcessGlobals();
/*
[parent: f946069e6827]