Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 19 Dec 2006 11:15:05 -0600
From:      "Scot Hetzel" <swhetzel@gmail.com>
To:        "FreeBSD Current" <freebsd-current@freebsd.org>
Subject:   settimeofday function taking 24 - 30 minutes to complete
Message-ID:  <790a9fff0612190915va75678at895efa0bc93ac3a1@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
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.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?790a9fff0612190915va75678at895efa0bc93ac3a1>