1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-03 01:21:48 +03:00

MemoryContextCreate: assert parent is valid and different from node.

The case of "node == parent" might seem impossible, since we just
allocated the new node.  But it's possible if parent is a dangling
reference to a recently-deleted context.  In fact, given aset.c's
habit of recycling contexts, it's actually rather likely if that's so.
If we'd had this assertion before, it would have simplified debugging
a recently-identified walsender issue.

Reported-by: Anthonin Bonnefoy <anthonin.bonnefoy@datadoghq.com>
Author: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/CAO6_XqoJA7-_G6t7Uqe5nWF3nj+QBGn4F6Ptp=rUGDr0zo+KvA@mail.gmail.com
This commit is contained in:
Tom Lane 2025-04-21 11:34:36 -04:00
parent 706cbed351
commit 5ec8b01c30

View File

@ -1181,6 +1181,10 @@ MemoryContextCreate(MemoryContext node,
/* Creating new memory contexts is not allowed in a critical section */
Assert(CritSectionCount == 0);
/* Validate parent, to help prevent crazy context linkages */
Assert(parent == NULL || MemoryContextIsValid(parent));
Assert(node != parent);
/* Initialize all standard fields of memory context header */
node->type = tag;
node->isReset = true;