From: Fujii Masao Date: Fri, 3 Apr 2015 09:29:38 +0000 (+0900) Subject: Rework handling of OOM when allocating record buffer in XLOG reader. X-Git-Tag: REL9_5_ALPHA1~498 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9b8d478;p=postgresql 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 --- 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; }