summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/utils/sort/logtape.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/backend/utils/sort/logtape.c b/src/backend/utils/sort/logtape.c
index 891a663d31..789dc2dec1 100644
--- a/src/backend/utils/sort/logtape.c
+++ b/src/backend/utils/sort/logtape.c
@@ -625,7 +625,10 @@ LogicalTapeWrite(LogicalTape *lt, void *ptr, size_t size)
Assert(lt->buffer_size == BLCKSZ);
while (size > 0)
{
- if (lt->pos >= TapeBlockPayloadSize)
+ int bufleft;
+
+ bufleft = TapeBlockPayloadSize - lt->pos;
+ if (bufleft == 0)
{
/* Buffer full, dump it out */
long nextBlockNumber;
@@ -646,18 +649,16 @@ LogicalTapeWrite(LogicalTape *lt, void *ptr, size_t size)
lt->curBlockNumber = nextBlockNumber;
lt->pos = 0;
lt->nbytes = 0;
+ bufleft = TapeBlockPayloadSize;
}
- nthistime = TapeBlockPayloadSize - lt->pos;
- if (nthistime > size)
- nthistime = size;
+ nthistime = Min(bufleft, size);
Assert(nthistime > 0);
memcpy(lt->buffer + lt->pos, ptr, nthistime);
lt->pos += nthistime;
- if (lt->nbytes < lt->pos)
- lt->nbytes = lt->pos;
+ lt->nbytes = lt->pos;
ptr = (void *) ((char *) ptr + nthistime);
size -= nthistime;
}