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
This commit is contained in:
parent
8c8a886268
commit
9b8d4782ba
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user