From 4b980167cb5a489346c5e53afb86280a7d59ebc7 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sun, 13 Mar 2016 00:21:07 -0500
Subject: [PATCH] Report memory context stats upon out-of-memory in
 repalloc[_huge].

This longstanding functionality evidently got lost in commit
3d6d1b585524aab6.  Noted while studying an OOM report from Jaime
Casanova.  Backpatch to 9.5 where the bug was introduced.
---
 src/backend/utils/mmgr/mcxt.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/backend/utils/mmgr/mcxt.c b/src/backend/utils/mmgr/mcxt.c
index 2bfd364336b..6b7894213c1 100644
--- a/src/backend/utils/mmgr/mcxt.c
+++ b/src/backend/utils/mmgr/mcxt.c
@@ -1051,10 +1051,13 @@ repalloc(void *pointer, Size size)
 
 	ret = (*context->methods->realloc) (context, pointer, size);
 	if (ret == NULL)
+	{
+		MemoryContextStats(TopMemoryContext);
 		ereport(ERROR,
 				(errcode(ERRCODE_OUT_OF_MEMORY),
 				 errmsg("out of memory"),
 				 errdetail("Failed on request of size %zu.", size)));
+	}
 
 	VALGRIND_MEMPOOL_CHANGE(context, pointer, ret, size);
 
@@ -1131,10 +1134,13 @@ repalloc_huge(void *pointer, Size size)
 
 	ret = (*context->methods->realloc) (context, pointer, size);
 	if (ret == NULL)
+	{
+		MemoryContextStats(TopMemoryContext);
 		ereport(ERROR,
 				(errcode(ERRCODE_OUT_OF_MEMORY),
 				 errmsg("out of memory"),
 				 errdetail("Failed on request of size %zu.", size)));
+	}
 
 	VALGRIND_MEMPOOL_CHANGE(context, pointer, ret, size);
 
-- 
GitLab