settimeofday function taking 24 - 30 minutes to complete
Scot Hetzel
swhetzel at gmail.com
Tue Dec 19 09:43:04 PST 2006
While working on implementing the settimeofday function in the
linuxolator, I was using the LTP testcase settimeofday01 to test it.
Running this test caused the system to hang for 24-30 minutes.
I then decided to rewrite the testcase so that it would run on
FreeBSD, and it also hung the system for 24-30 minutes. What the
settimeofday01 test was doing is to set the time to a known value (100
sec, 100 usec) and then use gettimeofday to retrieve the current time.
It then compared the returned value to check if it was within +/- 500
msec.
I have since reduced the testcode down to the following testcase that
is causing the hang.
Any ideals as to what could be causing this hang?
Scot
#include <sys/time.h>
#include <errno.h>
#include <unistd.h>
#define VAL_SEC 100
#define VAL_MSEC 100
int main(int argc, char **argv)
{
struct timeval tp, tp1, save_tv;
long return_test, errno_test;
suseconds_t delta;
#define TEST(SCALL) \
do { \
errno = 0; \
return_test = SCALL; \
errno_test = errno; \
} while (0)
/* Save the current time values */
if ((gettimeofday(&save_tv, (struct timezone *)&tp1)) == -1) {
printf("BROK: gettimeofday failed. errno=%d\n", errno);
exit(1);
} else {
printf("INFO: Saved current time\n");
}
tp.tv_sec = VAL_SEC;
tp.tv_usec = VAL_MSEC;
/* Hang occurs here */
TEST(settimeofday(&tp, NULL));
if (return_test == -1) {
printf("FAIL: Error Setting Time, errno=%d\n", errno_test);
} else {
printf("INFO: settimeofday completed sucessfully\n");
}
/* restore the original time values. */
if ((settimeofday(&save_tv, NULL)) == -1) {
printf("WARN: FATAL COULD NOT RESET THE CLOCK\n");
printf("FAIL: Error Setting Time, errno=%d (%d, %d)\n",
errno, tp.tv_sec, tp.tv_usec);
} else {
printf("INFO: Reset time to original value\n");
}
return(0);
}
--
DISCLAIMER:
No electrons were mamed while sending this message. Only slightly bruised.
More information about the freebsd-current
mailing list