diff options
author | Clark Williams <williams@redhat.com> | 2012-03-26 13:36:55 -0500 |
---|---|---|
committer | Clark Williams <williams@redhat.com> | 2012-03-26 13:36:55 -0500 |
commit | f2b344c958ecaba7d305fc7c78147333adc3bbc4 (patch) | |
tree | 6c2ce74ca2e8b39c5b3d57e3066bbb02a2020dbf | |
parent | c9870e6cbad0fbd8689e8b91b06e01c2f971bd82 (diff) | |
download | cyclictest-f2b344c958ecaba7d305fc7c78147333adc3bbc4.tar.gz |
change cyclictest measurement thread to check returns and exit on error
Start of an ongoing process to have error strategy where return is
checked and if error, exit with appropriate status.
Signed-off-by: Clark Williams <williams@redhat.com>
-rw-r--r-- | src/cyclictest/cyclictest.c | 41 |
1 files changed, 26 insertions, 15 deletions
diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c index c0cde4a..dadced8 100644 --- a/src/cyclictest/cyclictest.c +++ b/src/cyclictest/cyclictest.c @@ -1,7 +1,7 @@ /* * High resolution timer test software * - * (C) 2008-2011 Clark Williams <williams@redhat.com> + * (C) 2008-2012 Clark Williams <williams@redhat.com> * (C) 2005-2007 Thomas Gleixner <tglx@linutronix.de> * * This program is free software; you can redistribute it and/or @@ -693,35 +693,46 @@ void *timerthread(void *param) case MODE_CLOCK_NANOSLEEP: if (par->timermode == TIMER_ABSTIME) { - ret = clock_nanosleep(par->clock, TIMER_ABSTIME, - &next, NULL); + if ((ret = clock_nanosleep(par->clock, TIMER_ABSTIME, &next, NULL))) { + if (ret != EINTR) + warn("clock_nanosleep failed. errno: %d\n", errno); + goto out; + } } else { clock_gettime(par->clock, &now); - ret = clock_nanosleep(par->clock, TIMER_RELTIME, - &interval, NULL); + if ((ret = clock_nanosleep(par->clock, TIMER_RELTIME, &interval, NULL))) { + if (ret != EINTR) + warn("clock_gettime failed. errno: %d\n", errno); + goto out; + } next.tv_sec = now.tv_sec + interval.tv_sec; next.tv_nsec = now.tv_nsec + interval.tv_nsec; tsnorm(&next); } - - /* Avoid negative calcdiff result if clock_nanosleep() - * gets interrupted. - */ - if (ret == EINTR) - goto out; - break; case MODE_SYS_NANOSLEEP: - clock_gettime(par->clock, &now); - nanosleep(&interval, NULL); + if ((ret = clock_gettime(par->clock, &now))) { + if (ret != EINTR) + warn("clock_gettime failed: errno %d\n", errno); + goto out; + } + if (nanosleep(&interval, NULL)) { + if (errno != EINTR) + warn("nanosleep failed. errno: %d\n", errno); + goto out; + } next.tv_sec = now.tv_sec + interval.tv_sec; next.tv_nsec = now.tv_nsec + interval.tv_nsec; tsnorm(&next); break; } - clock_gettime(par->clock, &now); + if ((ret = clock_gettime(par->clock, &now))) { + if (ret != EINTR) + warn("clock_getttime failed. errno: %d\n", errno); + goto out; + } if (use_nsecs) diff = calcdiff_ns(now, next); |