diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c index 7a935f34b58293de68b77b4919d4dc659f177aa5..23c8b5de6b448650e6d8c5b7c38a198bb2ab2f99 100644 --- a/src/backend/libpq/hba.c +++ b/src/backend/libpq/hba.c @@ -386,7 +386,7 @@ tokenize_file(const char *filename, FILE *file, MemoryContext linecxt; MemoryContext oldcxt; - linecxt = AllocSetContextCreate(TopMemoryContext, + linecxt = AllocSetContextCreate(CurrentMemoryContext, "tokenize file cxt", ALLOCSET_DEFAULT_MINSIZE, ALLOCSET_DEFAULT_INITSIZE, @@ -1770,7 +1770,8 @@ load_hba(void) FreeFile(file); /* Now parse all the lines */ - hbacxt = AllocSetContextCreate(TopMemoryContext, + Assert(PostmasterContext); + hbacxt = AllocSetContextCreate(PostmasterContext, "hba parser context", ALLOCSET_DEFAULT_MINSIZE, ALLOCSET_DEFAULT_MINSIZE, @@ -2147,7 +2148,8 @@ load_ident(void) FreeFile(file); /* Now parse all the lines */ - ident_context = AllocSetContextCreate(TopMemoryContext, + Assert(PostmasterContext); + ident_context = AllocSetContextCreate(PostmasterContext, "ident parser context", ALLOCSET_DEFAULT_MINSIZE, ALLOCSET_DEFAULT_MINSIZE, diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c index 063b0653b49416622a18e2d5bd472d8c0ea56af1..0f04f28116696d2f109909d499cc8ee61e2c0028 100644 --- a/src/backend/utils/init/postinit.c +++ b/src/backend/utils/init/postinit.c @@ -52,6 +52,7 @@ #include "utils/acl.h" #include "utils/fmgroids.h" #include "utils/guc.h" +#include "utils/memutils.h" #include "utils/pg_locale.h" #include "utils/portal.h" #include "utils/ps_status.h" @@ -190,6 +191,18 @@ PerformAuthentication(Port *port) * FIXME: [fork/exec] Ugh. Is there a way around this overhead? */ #ifdef EXEC_BACKEND + /* + * load_hba() and load_ident() want to work within the PostmasterContext, + * so create that if it doesn't exist (which it won't). We'll delete it + * again later, in PostgresMain. + */ + if (PostmasterContext == NULL) + PostmasterContext = AllocSetContextCreate(TopMemoryContext, + "Postmaster", + ALLOCSET_DEFAULT_MINSIZE, + ALLOCSET_DEFAULT_INITSIZE, + ALLOCSET_DEFAULT_MAXSIZE); + if (!load_hba()) { /*