aboutsummaryrefslogtreecommitdiff
path: root/contrib/postgres_fdw/sql
diff options
context:
space:
mode:
authorDavid Rowley <drowley@postgresql.org>2021-07-01 15:29:06 +1200
committerDavid Rowley <drowley@postgresql.org>2021-07-01 15:29:06 +1200
commit3788c66788e9f8c6904c6fe903724c1f44812c4d (patch)
tree0b1acb1c37196dcf9dee74a7b2d8e03f411ed813 /contrib/postgres_fdw/sql
parente45b0dfa1f1028948decad3abd3b0f6e913a44b0 (diff)
downloadpostgresql-3788c66788e9f8c6904c6fe903724c1f44812c4d.tar.gz
postgresql-3788c66788e9f8c6904c6fe903724c1f44812c4d.zip
Improve various places that double the size of a buffer
Several places were performing a tight loop to determine the first power of 2 number that's > or >= the required memory. Instead of using a loop for that, we can use pg_nextpower2_32 or pg_nextpower2_64. When we need a power of 2 number equal to or greater than a given amount, we just pass the amount to the nextpower2 function. When we need a power of 2 greater than the amount, we just pass the amount + 1. Additionally, in tsearch there were a couple of locations that were performing a while loop when a simple "if" would have done. In both of these locations only 1 item is being added, so the loop could only have ever iterated once. Changing the loop into an if statement makes the code very slightly more optimal as the condition is checked once rather than twice. There are quite a few remaining locations that increase the size of the buffer in the following form: while (reqsize >= buflen) { buflen *= 2; buf = repalloc(buf, buflen); } These are not touched in this commit. repalloc will error out for sizes larger than MaxAllocSize. Changing these to use pg_nextpower2_32 would remove the chance of that error being raised. It's unclear from the code if the sizes could ever become that large, so err on the side of caution. Discussion: https://postgr.es/m/CAApHDvp=tns7RL4PH0ZR0M+M-YFLquK7218x=0B_zO+DbOma+w@mail.gmail.com Reviewed-by: Zhihong Yu
Diffstat (limited to 'contrib/postgres_fdw/sql')
0 files changed, 0 insertions, 0 deletions