From 9b8d4782ba0f75eb0f029c743bb85166999d9fa5 Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Fri, 3 Apr 2015 18:29:38 +0900 Subject: [PATCH] Rework handling of OOM when allocating record buffer in XLOG reader. Commit 2c03216 changed allocate_recordbuf() so that it uses a palloc to allocate the read buffer and fails immediately when an out-of-memory error shows up, even though its callers still expect that NULL is returned in that case. This bug is fixed making allocate_recordbuf() use a palloc_extended with MCXT_ALLOC_NO_OOM flag and return NULL in OOM case. Michael Paquier --- src/backend/access/transam/xlogreader.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index ba7dfcc028..ffdc9753ad 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -146,7 +146,13 @@ allocate_recordbuf(XLogReaderState *state, uint32 reclength) if (state->readRecordBuf) pfree(state->readRecordBuf); - state->readRecordBuf = (char *) palloc(newSize); + state->readRecordBuf = + (char *) palloc_extended(newSize, MCXT_ALLOC_NO_OOM); + if (state->readRecordBuf == NULL) + { + state->readRecordBufSize = 0; + return false; + } state->readRecordBufSize = newSize; return true; } -- 2.40.0