aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/sort/logtape.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/backend/utils/sort/logtape.c b/src/backend/utils/sort/logtape.c
index caa6960b957..6cc06b24e0d 100644
--- a/src/backend/utils/sort/logtape.c
+++ b/src/backend/utils/sort/logtape.c
@@ -778,11 +778,16 @@ LogicalTapeRewind(LogicalTapeSet *lts, int tapenum, bool forWrite)
datablocknum = ltsRewindFrozenIndirectBlock(lts, lt->indirect);
}
- /* Allocate a read buffer */
+ /* Allocate a read buffer (unless the tape is empty) */
if (lt->buffer)
pfree(lt->buffer);
- lt->buffer = palloc(lt->read_buffer_size);
- lt->buffer_size = lt->read_buffer_size;
+ lt->buffer = NULL;
+ lt->buffer_size = 0;
+ if (datablocknum != -1L)
+ {
+ lt->buffer = palloc(lt->read_buffer_size);
+ lt->buffer_size = lt->read_buffer_size;
+ }
/* Read the first block, or reset if tape is empty */
lt->curBlockNumber = 0L;