From: Jeff Davis Date: Sun, 7 Jun 2020 16:14:24 +0000 (-0700) Subject: Fix platform-specific performance regression in logtape.c. X-Git-Tag: REL_13_BETA2~55 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=1fbb6c93df30801f83c6804ab7befde3cdefe677;p=postgresql.git Fix platform-specific performance regression in logtape.c. Commit 24d85952 made a change that indirectly caused a performance regression by triggering a change in the way GCC optimizes memcpy() on some platforms. The behavior seemed to contradict a GCC document, so I filed a report: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95556 This patch implements a narrow workaround which eliminates the regression I observed. The workaround is benign enough that it seems unlikely to cause a different regression on another platform. Discussion: https://postgr.es/m/99b2eab335c1592c925d8143979c8e9e81e1575f.camel@j-davis.com --- diff --git a/src/backend/utils/sort/logtape.c b/src/backend/utils/sort/logtape.c index 666a7c0e81c..4984f8ce50a 100644 --- a/src/backend/utils/sort/logtape.c +++ b/src/backend/utils/sort/logtape.c @@ -782,7 +782,7 @@ LogicalTapeWrite(LogicalTapeSet *lts, int tapenum, Assert(lt->buffer_size == BLCKSZ); while (size > 0) { - if (lt->pos >= TapeBlockPayloadSize) + if (lt->pos >= (int) TapeBlockPayloadSize) { /* Buffer full, dump it out */ long nextBlockNumber;