diff options
-rw-r--r-- | src/backend/utils/sort/logtape.c | 13 |
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; } |