[LinuxPPS] [PATCHv3 03/16] pps: fix race in PPS_FETCH handler
tlhackque
tlhackque at yahoo.com
Fri Aug 6 18:30:57 CEST 2010
> > Yes, it will freeze the fds (if they don't use timeouts). But in
> > normal circumstances, i.e. when pps_event is called twice a second,
> > it will overflow after ~68 years of uninterrupted work. Well, it's
> > the same kind of problem as an overflow of struct timespec. I
> > thought it's not actually a problem. Should I use u64 instead of
> > unsigned int or add a runtime check somewhere?
>
> If we're using 1PPS it's ~68 years, but someone is trying 5PPS now
> (it would overflow in ~13.6 years) - what if someone tries e.g. 100PPS?
> It's not the same as overflow of struct timespec! I think it deserves
> some treatment.
I don't like this approach in any code. There is no reason to write code that
isn't robust in the face of overflow.
Two alternatives:
- if all you care about is that there's a change, use a comparison for !=
- If you really need less than, do a modulo compare (There's reasonably
efficient code for this, see any network stack's sequence number comparisions.)
In either case, the width of the counter needs to be how many unrecognized
events you can have (maybe 2x for a cheap modulo compare), not some length of
time before the system hangs. This will be much, much less than 64 bits.
Every time someone thinks that their length of time is acceptable, it bites
someone else later. Technology changes. Or your code gets sent on an
interstellar mission that really is expected to run 120 years :-)
Seriously, I've seen these kinds of counters break in all kinds of embedded
systems - and there's no reason for it. Should I tell the story about the
mainframe that crashed reproducibly after about 6 months of uptime because
everyone knew that a 32-bit uptime counter used to manage timeouts would NEVER
overflow in a disk controller? No controller ever went that long without being
reset...until it became the least reliable component in the system.
---------------------------------------------------------
This communication may not represent my employer's views,
if any, on the matters discussed.
More information about the LinuxPPS
mailing list