forked frompostgres/postgres
- Notifications
You must be signed in to change notification settings - Fork6
Commit3788c66
committed
Improve various places that double the size of a buffer
Several places were performing a tight loop to determine the first powerof 2 number that's > or >= the required memory. Instead of using a loopfor that, we can use pg_nextpower2_32 or pg_nextpower2_64. When we need apower of 2 number equal to or greater than a given amount, we just passthe amount to the nextpower2 function. When we need a power of 2 greaterthan the amount, we just pass the amount + 1.Additionally, in tsearch there were a couple of locations that wereperforming a while loop when a simple "if" would have done. In both ofthese locations only 1 item is being added, so the loop could only haveever iterated once. Changing the loop into an if statement makes the codevery slightly more optimal as the condition is checked once rather thantwice.There are quite a few remaining locations that increase the size of thebuffer 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 sizeslarger than MaxAllocSize. Changing these to use pg_nextpower2_32 wouldremove the chance of that error being raised. It's unclear from the codeif 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.comReviewed-by: Zhihong Yu1 parente45b0df commit3788c66
File tree
7 files changed
+21
-24
lines changed- src/backend
- parser
- storage
- ipc
- lmgr
- tsearch
- utils/cache
7 files changed
+21
-24
lines changedLines changed: 2 additions & 4 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
39 | 39 |
| |
40 | 40 |
| |
41 | 41 |
| |
| 42 | + | |
42 | 43 |
| |
43 | 44 |
| |
44 | 45 |
| |
| |||
1253 | 1254 |
| |
1254 | 1255 |
| |
1255 | 1256 |
| |
1256 |
| - | |
1257 |
| - | |
1258 |
| - | |
1259 |
| - | |
| 1257 | + | |
1260 | 1258 |
| |
1261 | 1259 |
| |
1262 | 1260 |
| |
|
Lines changed: 9 additions & 5 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
20 | 20 |
| |
21 | 21 |
| |
22 | 22 |
| |
| 23 | + | |
23 | 24 |
| |
24 | 25 |
| |
25 | 26 |
| |
| |||
720 | 721 |
| |
721 | 722 |
| |
722 | 723 |
| |
723 |
| - | |
| 724 | + | |
724 | 725 |
| |
725 | 726 |
| |
726 |
| - | |
727 |
| - | |
| 727 | + | |
| 728 | + | |
728 | 729 |
| |
729 |
| - | |
730 |
| - | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
731 | 735 |
| |
732 | 736 |
| |
733 | 737 |
| |
|
Lines changed: 3 additions & 7 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
79 | 79 |
| |
80 | 80 |
| |
81 | 81 |
| |
| 82 | + | |
82 | 83 |
| |
83 | 84 |
| |
84 | 85 |
| |
| |||
659 | 660 |
| |
660 | 661 |
| |
661 | 662 |
| |
662 |
| - | |
663 |
| - | |
664 |
| - | |
| 663 | + | |
665 | 664 |
| |
666 | 665 |
| |
667 | 666 |
| |
| |||
715 | 714 |
| |
716 | 715 |
| |
717 | 716 |
| |
718 |
| - | |
719 |
| - | |
720 |
| - | |
721 |
| - | |
| 717 | + | |
722 | 718 |
| |
723 | 719 |
| |
724 | 720 |
| |
|
Lines changed: 2 additions & 1 deletion
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
1600 | 1600 |
| |
1601 | 1601 |
| |
1602 | 1602 |
| |
1603 |
| - | |
| 1603 | + | |
| 1604 | + | |
1604 | 1605 |
| |
1605 | 1606 |
| |
1606 | 1607 |
| |
|
Lines changed: 1 addition & 1 deletion
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
436 | 436 |
| |
437 | 437 |
| |
438 | 438 |
| |
439 |
| - | |
| 439 | + | |
440 | 440 |
| |
441 | 441 |
| |
442 | 442 |
| |
|
Lines changed: 2 additions & 2 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
106 | 106 |
| |
107 | 107 |
| |
108 | 108 |
| |
| 109 | + | |
109 | 110 |
| |
110 | 111 |
| |
111 | 112 |
| |
| |||
799 | 800 |
| |
800 | 801 |
| |
801 | 802 |
| |
802 |
| - | |
803 |
| - | |
| 803 | + | |
804 | 804 |
| |
805 | 805 |
| |
806 | 806 |
| |
|
Lines changed: 2 additions & 4 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
60 | 60 |
| |
61 | 61 |
| |
62 | 62 |
| |
| 63 | + | |
63 | 64 |
| |
64 | 65 |
| |
65 | 66 |
| |
| |||
1708 | 1709 |
| |
1709 | 1710 |
| |
1710 | 1711 |
| |
1711 |
| - | |
1712 |
| - | |
1713 |
| - | |
1714 |
| - | |
| 1712 | + | |
1715 | 1713 |
| |
1716 | 1714 |
| |
1717 | 1715 |
| |
|
0 commit comments
Comments
(0)