Commit 3afd75e
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 2fd5809 commit 3afd75e
1 file changed
+7
-5
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4064 | 4064 | | |
4065 | 4065 | | |
4066 | 4066 | | |
4067 | | - | |
4068 | | - | |
| 4067 | + | |
| 4068 | + | |
4069 | 4069 | | |
4070 | 4070 | | |
4071 | 4071 | | |
| |||
4174 | 4174 | | |
4175 | 4175 | | |
4176 | 4176 | | |
4177 | | - | |
4178 | | - | |
| 4177 | + | |
| 4178 | + | |
4179 | 4179 | | |
4180 | 4180 | | |
4181 | 4181 | | |
| |||
4195 | 4195 | | |
4196 | 4196 | | |
4197 | 4197 | | |
4198 | | - | |
| 4198 | + | |
4199 | 4199 | | |
| 4200 | + | |
| 4201 | + | |
4200 | 4202 | | |
4201 | 4203 | | |
4202 | 4204 | | |
| |||
0 commit comments