3 ms·
I liked this gem in L547: > The code that we have used for the past 10+ years to cycle 4-element ring buffers turns out to be not quite portable in theoreti
by jakub_g 10y ago
I liked this gem in L547:
> The code that we have used for the past 10+ years to cycle 4-element ring buffers turns out to be not quite portable in theoretical world.
- unwind 10y agoThat piqued my curiousity, and I had to dig up the relevant commit: https://github.com/git/git/commit/bb84735c80 https://github.com/git/git/commit/bb84735c80. It deals with wrapping an integer index around after incrementing it, the old code just used ++index and a bitmask, the new code uses + 1 and modulo. I have problems understanding this right now, in my world ++index for an int really shouldn't trigger overflow when counting to at most 4, on any (sem-)realistic environment? Feeling extra dense, must have more coffee.
- peff 10y agoThe counter never resets, it just keeps going up and we only look at the low bits. So eventually it will need to wrap. It's doubtful that ever happened in practice, even on a 32-bit system (you'd need to print 2 billion SHA-1s in a single process, and even the largest repos have on the order of millions). So the key difference between the old and the new is that the counter resets to zero every fourth call.
- unwind 10y agoAh, right, that was the thing I failed to see. Obvious now, of course. :) Thanks.