Hi,

Settimeofday()/gettimeofday() and time() are known not to keep 
consistent time against one another in RHEL 5 kernel[1]. As the 
result, stime01 test case failed because the date of time() returned 
was less than the date that stime() (settimeofday() on x86-64) set.

# uname -ra

# ./stime01
stime01     1  FAIL  :  stime() fails to set system's time

Some debug information:
curr_time = 1228827598
pres_time = 1228827607

We can see that "pres_time != curr_time + 10".

[1] https://bugzilla.redhat.com/show_bug.cgi?id=475477

Signed-off-by: CAI Qian <[email protected]>

--- testcases/kernel/syscalls/stime/stime01.c.orig      2008-12-12 
11:25:49.952135991 +0800
+++ testcases/kernel/syscalls/stime/stime01.c   2008-12-12 11:42:43.456151307 
+0800
@@ -73,6 +73,7 @@
 #include <time.h>
 #include <string.h>
 #include <sys/stat.h>
+#include <sys/time.h>
 #include <signal.h>
 
 #include "test.h"
@@ -83,9 +84,8 @@
 char *TCID="stime01";          /* Test program identifier.    */
 int TST_TOTAL=1;               /* Total number of test cases. */
 extern int Tst_count;          /* Test Case counter for tst_* routines */
-time_t curr_time;              /* system's current time in seconds */
 time_t new_time;               /* system's new time */
-time_t tloc;                   /* argument var. for time() */
+struct timeval tv;             /* argument var. for gettimeofday() */
 int exp_enos[]={0};
 
 void setup();                  /* Main setup function of test */
@@ -96,8 +96,7 @@
 {
        int lc;                 /* loop counter */
        char *msg;              /* message returned from parse_opts */
-       time_t pres_time;       /* system's present time */
-    
+ 
        /* Parse standard options given to run the test. */
        msg = parse_opts(ac, av, (option_t *) NULL, NULL);
        if (msg != (char *) NULL) {
@@ -138,7 +137,7 @@
                                 * Get the system's current time after call
                                 * to stime().
                                 */
-                               if ((pres_time = time(&tloc)) < 0) {
+                               if ((gettimeofday(&tv, NULL)) < 0) {
                                        tst_brkm(TFAIL, cleanup,
                                                "time() failed to get "
                                                "system's time after stime, "
@@ -147,8 +146,8 @@
                                }
 
                                /* Now do the actual verification */
-                               if ((pres_time != new_time) && 
-                                  (pres_time != new_time + 1)) {
+                               if ((tv.tv_sec != new_time) && 
+                                  (tv.tv_sec != new_time + 1)) {
                                        tst_resm(TFAIL, "stime() fails to set "
                                                "system's time");
                                } else {
@@ -194,15 +193,15 @@
        TEST_PAUSE;
 
        /* Get the current time */
-       if ((curr_time = time(&tloc)) < 0) {
+       if ((gettimeofday(&tv, NULL)) < 0) {
                tst_brkm(TBROK, cleanup,
-                        "time() failed to get current time, errno=%d",
+                        "gettimeofday() failed to get current time, errno=%d",
                         errno);
                /*NOTREACHED*/
        }
 
        /* Get the system's new time */
-       new_time = curr_time + INCR_TIME;
+       new_time = tv.tv_sec + INCR_TIME;
 }      /* End setup() */
 
 /*


------------------------------------------------------------------------------
SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las Vegas, Nevada.
The future of the web can't happen without you.  Join us at MIX09 to help
pave the way to the Next Web now. Learn more and register at
http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to