From fc3f4453a2bc95549682e23600b22e658cb2d6d7 Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Sun, 5 Apr 2020 18:23:30 -0700 Subject: 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/utils/init/miscinit.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/backend/utils/init/miscinit.c') 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(); /* -- cgit v1.2.3