Commit c24a908
committed
Remove dubious micro-optimization in ckpt_buforder_comparator().
It seems incorrect to assume that the list of CkptSortItems can never
contain duplicate page numbers: concurrent activity could result in some
page getting dropped from a low-numbered buffer and later loaded into a
high-numbered buffer while BufferSync is scanning the buffer pool.
If that happened, the comparator would give self-inconsistent results,
potentially confusing qsort(). Saving one comparison step is not worth
possibly getting the sort wrong.
So far as I can tell, nothing would actually go wrong given our current
implementation of qsort(). It might get a bit slower than expected
if there were a large number of duplicates of one value, but that's
surely a probability-epsilon case. Still, the comment is wrong,
and if we ever switched to another sort implementation it might be
less forgiving.
In passing, avoid casting away const-ness of the argument pointers;
I've not seen any compiler complaints from that, but it seems likely
that some compilers would not like it.
Back-patch to 9.6 where this code came in, just in case I've underestimated
the possible consequences.
Discussion: https://postgr.es/m/18437.1515607610@sss.pgh.pa.us1 parent 0126838 commit c24a908
1 file changed
+7
-5
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4020 | 4020 | | |
4021 | 4021 | | |
4022 | 4022 | | |
4023 | | - | |
4024 | | - | |
| 4023 | + | |
| 4024 | + | |
4025 | 4025 | | |
4026 | 4026 | | |
4027 | 4027 | | |
| |||
4130 | 4130 | | |
4131 | 4131 | | |
4132 | 4132 | | |
4133 | | - | |
4134 | | - | |
| 4133 | + | |
| 4134 | + | |
4135 | 4135 | | |
4136 | 4136 | | |
4137 | 4137 | | |
| |||
4151 | 4151 | | |
4152 | 4152 | | |
4153 | 4153 | | |
4154 | | - | |
| 4154 | + | |
4155 | 4155 | | |
| 4156 | + | |
| 4157 | + | |
4156 | 4158 | | |
4157 | 4159 | | |
4158 | 4160 | | |
| |||
0 commit comments