I don't understand this code well enough to be sure, but it looks to me like all of these values are just counters: why not switch to 64-bit counters, and not worry about overflow?

I'd be happier with a test against UINT32_MAX instead of testing for rollover.