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
pull/14/head
Fujii Masao 10 years ago
parent 8c8a886268
commit 9b8d4782ba
  1. 8
      src/backend/access/transam/xlogreader.c

@ -146,7 +146,13 @@ allocate_recordbuf(XLogReaderState *state, uint32 reclength)
if (state->readRecordBuf) if (state->readRecordBuf)
pfree(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; state->readRecordBufSize = newSize;
return true; return true;
} }

Loading…
Cancel
Save