Note, I have seen different bugs on 2.2 and 2.4 kernels. Given that we don't return any of the other fields from MLton.Rusage.rusage, why not just use times(). I know that I recommended against it before because it is old fashioned, but it IS atomic so I would just use that. It is trivial to change the C code and leave the structure MLton.Rusage the same as it is. Isn't this clearly the way to go?