aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/utils/adt/varlena.c16
1 files changed, 6 insertions, 10 deletions
diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c
index 390da8e820d..9dea2a5494d 100644
--- a/src/backend/utils/adt/varlena.c
+++ b/src/backend/utils/adt/varlena.c
@@ -78,8 +78,8 @@ typedef struct
char *buf1; /* 1st string, or abbreviation original string
* buf */
char *buf2; /* 2nd string, or abbreviation strxfrm() buf */
- int buflen1;
- int buflen2;
+ int buflen1; /* Allocated length of buf1 */
+ int buflen2; /* Allocated length of buf2 */
int last_len1; /* Length of last buf1 string/strxfrm() input */
int last_len2; /* Length of last buf2 string/strxfrm() blob */
int last_returned; /* Last comparison result (cache) */
@@ -2309,15 +2309,13 @@ varstrfastcmp_locale(char *a1p, int len1, char *a2p, int len2, SortSupport ssup)
if (len1 >= sss->buflen1)
{
- pfree(sss->buf1);
sss->buflen1 = Max(len1 + 1, Min(sss->buflen1 * 2, MaxAllocSize));
- sss->buf1 = MemoryContextAlloc(ssup->ssup_cxt, sss->buflen1);
+ sss->buf1 = repalloc(sss->buf1, sss->buflen1);
}
if (len2 >= sss->buflen2)
{
- pfree(sss->buf2);
sss->buflen2 = Max(len2 + 1, Min(sss->buflen2 * 2, MaxAllocSize));
- sss->buf2 = MemoryContextAlloc(ssup->ssup_cxt, sss->buflen2);
+ sss->buf2 = repalloc(sss->buf2, sss->buflen2);
}
/*
@@ -2518,9 +2516,8 @@ varstr_abbrev_convert(Datum original, SortSupport ssup)
/* By convention, we use buffer 1 to store and NUL-terminate */
if (len >= sss->buflen1)
{
- pfree(sss->buf1);
sss->buflen1 = Max(len + 1, Min(sss->buflen1 * 2, MaxAllocSize));
- sss->buf1 = palloc(sss->buflen1);
+ sss->buf1 = repalloc(sss->buf1, sss->buflen1);
}
/* Might be able to reuse strxfrm() blob from last call */
@@ -2607,10 +2604,9 @@ varstr_abbrev_convert(Datum original, SortSupport ssup)
/*
* Grow buffer and retry.
*/
- pfree(sss->buf2);
sss->buflen2 = Max(bsize + 1,
Min(sss->buflen2 * 2, MaxAllocSize));
- sss->buf2 = palloc(sss->buflen2);
+ sss->buf2 = repalloc(sss->buf2, sss->buflen2);
}
/*