logtape.c: allocate read buffer even for an empty tape.
Prior to this commit, the read buffer was allocated at the time the tape was rewound; but as an optimization, would not be allocated at all if the tape was empty. That optimization meant that it was valid to have a rewound tape with the buffer set to NULL, but only if a number of conditions were met and only if the API was used properly. After 7fdd919a refactored the code to support lazily-allocating the buffer, Coverity started complaining. The optimization for empty tapes doesn't seem important, so just allocate the buffer whether the tape has any data or not. Discussion: https://postgr.es/m/20351.1581868306%40sss.pgh.pa.us
This commit is contained in:
parent
0074919794
commit
8021985d79
@ -544,11 +544,8 @@ ltsConcatWorkerTapes(LogicalTapeSet *lts, TapeShare *shared,
|
||||
static void
|
||||
ltsInitReadBuffer(LogicalTapeSet *lts, LogicalTape *lt)
|
||||
{
|
||||
if (lt->firstBlockNumber != -1L)
|
||||
{
|
||||
Assert(lt->buffer_size > 0);
|
||||
lt->buffer = palloc(lt->buffer_size);
|
||||
}
|
||||
Assert(lt->buffer_size > 0);
|
||||
lt->buffer = palloc(lt->buffer_size);
|
||||
|
||||
/* Read the first block, or reset if tape is empty */
|
||||
lt->nextBlockNumber = lt->firstBlockNumber;
|
||||
@ -839,13 +836,10 @@ LogicalTapeRewindForRead(LogicalTapeSet *lts, int tapenum, size_t buffer_size)
|
||||
/* Allocate a read buffer (unless the tape is empty) */
|
||||
if (lt->buffer)
|
||||
pfree(lt->buffer);
|
||||
|
||||
/* the buffer is lazily allocated, but set the size here */
|
||||
lt->buffer = NULL;
|
||||
lt->buffer_size = 0;
|
||||
if (lt->firstBlockNumber != -1L)
|
||||
{
|
||||
/* the buffer is lazily allocated, but set the size here */
|
||||
lt->buffer_size = buffer_size;
|
||||
}
|
||||
lt->buffer_size = buffer_size;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user