summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Davis2020-02-18 20:31:24 +0000
committerJeff Davis2020-02-19 18:04:17 +0000
commit8021985d791902a9eeda51acdede759fbc67ae01 (patch)
tree07b22b50547a244639d0309b515f637bd72c2545
parent007491979461ff10d487e1da9bcc87f2fd834f26 (diff)
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
-rw-r--r--src/backend/utils/sort/logtape.c16
1 files changed, 5 insertions, 11 deletions
diff --git a/src/backend/utils/sort/logtape.c b/src/backend/utils/sort/logtape.c
index fd7624c2312..4f78b55fbaf 100644
--- a/src/backend/utils/sort/logtape.c
+++ b/src/backend/utils/sort/logtape.c
@@ -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;
}
/*