TIMER: Fix additional timespec overflow cases in diff and compares

This commit is contained in:
Mark Pizzolato 2018-07-15 10:18:30 -07:00
parent 97bee79faa
commit e537e4d8fe

View file

@ -694,7 +694,7 @@ while (sub->tv_nsec > diff->tv_nsec) {
diff->tv_nsec -= sub->tv_nsec; diff->tv_nsec -= sub->tv_nsec;
diff->tv_sec -= sub->tv_sec; diff->tv_sec -= sub->tv_sec;
/* Normalize the result */ /* Normalize the result */
while (diff->tv_nsec > 1000000000) { while (diff->tv_nsec >= 1000000000) {
++diff->tv_sec; ++diff->tv_sec;
diff->tv_nsec -= 1000000000; diff->tv_nsec -= 1000000000;
} }
@ -715,11 +715,11 @@ t_stat sim_timer_show_idle_mode (FILE* st, UNIT* uptr, int32 val, CONST void *
#if defined(SIM_ASYNCH_CLOCKS) #if defined(SIM_ASYNCH_CLOCKS)
static int sim_timespec_compare (struct timespec *a, struct timespec *b) static int sim_timespec_compare (struct timespec *a, struct timespec *b)
{ {
while (a->tv_nsec > 1000000000) { while (a->tv_nsec >= 1000000000) {
a->tv_nsec -= 1000000000; a->tv_nsec -= 1000000000;
++a->tv_sec; ++a->tv_sec;
} }
while (b->tv_nsec > 1000000000) { while (b->tv_nsec >= 1000000000) {
b->tv_nsec -= 1000000000; b->tv_nsec -= 1000000000;
++b->tv_sec; ++b->tv_sec;
} }