Robert Haas <robertmh...@gmail.com> writes: > I'm not convinced that we should try to improve the RNG, but surely we > need to put parentheses around pg_prng_double(&pg_global_prng_state) + > 0.5. IIUC, the current logic is making us multiply the spin delay by a > value between 0 and 1 when what was intended was that it should be > multiplied by a value between 0.5 and 1.5.
No, I think you are misreading it, because the assignment is += not =. The present coding is /* increase delay by a random fraction between 1X and 2X */ status->cur_delay += (int) (status->cur_delay * pg_prng_double(&pg_global_prng_state) + 0.5); which looks fine to me. The +0.5 is so that the conversion to integer rounds rather than truncating. In any case, I concur with Andres: if this behavior is anywhere near critical then the right fix is to not be using spinlocks. regards, tom lane