]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix some places that were unportably assuming struct timeval's tv_sec
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 24 Oct 2002 23:19:13 +0000 (23:19 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 24 Oct 2002 23:19:13 +0000 (23:19 +0000)
field is signed.  Clean up casting.

src/backend/postmaster/pgstat.c
src/backend/tcop/postgres.c

index d7da6177d0564d2f4da2d15ddbb033237bc55cd7..17c11682cf9e0cd60244a57474a8615c6418f7c4 100644 (file)
@@ -16,7 +16,7 @@
  *
  *     Copyright (c) 2001, PostgreSQL Global Development Group
  *
- *     $Header: /cvsroot/pgsql/src/backend/postmaster/pgstat.c,v 1.30 2002/10/21 19:59:14 tgl Exp $
+ *     $Header: /cvsroot/pgsql/src/backend/postmaster/pgstat.c,v 1.31 2002/10/24 23:19:13 tgl Exp $
  * ----------
  */
 #include "postgres.h"
@@ -1247,19 +1247,27 @@ pgstat_main(void)
                 */
                if (need_statwrite)
                {
-                       gettimeofday(&timeout, NULL);
-                       timeout.tv_usec = next_statwrite.tv_usec - timeout.tv_usec;
-                       timeout.tv_sec = next_statwrite.tv_sec - timeout.tv_sec;
-                       if (timeout.tv_usec < 0)
-                       {
-                               timeout.tv_sec -= 1;
-                               timeout.tv_usec += 1000000;
-                       }
-                       if (timeout.tv_sec < 0)
+                       struct timeval now;
+
+                       gettimeofday(&now, NULL);
+                       /* avoid assuming that tv_sec is signed */
+                       if (now.tv_sec > next_statwrite.tv_sec ||
+                               (now.tv_sec == next_statwrite.tv_sec &&
+                                now.tv_usec >= next_statwrite.tv_usec))
                        {
                                timeout.tv_sec = 0;
                                timeout.tv_usec = 0;
                        }
+                       else
+                       {
+                               timeout.tv_sec = next_statwrite.tv_sec - now.tv_sec;
+                               timeout.tv_usec = next_statwrite.tv_usec - now.tv_usec;
+                               if (timeout.tv_usec < 0)
+                               {
+                                       timeout.tv_sec--;
+                                       timeout.tv_usec += 1000000;
+                               }
+                       }
                }
 
                /*
index 585e55ef6bb54bb78d88778989436347d0593464..393b6955ce98bfc2101edc2700fc3b1285ec8b9b 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.305 2002/10/19 20:15:09 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.306 2002/10/24 23:19:13 tgl Exp $
  *
  * NOTES
  *       this is the "main" module of the postgres backend and
@@ -559,7 +559,6 @@ pg_exec_query_string(StringInfo query_string,       /* string to execute */
        MemoryContext oldcontext;
        List       *parsetree_list,
                           *parsetree_item;
-       struct timezone tz;
        struct timeval start_t,
                                stop_t;
        bool            save_Log_duration = Log_duration;
@@ -571,7 +570,7 @@ pg_exec_query_string(StringInfo query_string,       /* string to execute */
         * report incorrect time because gettimeofday() wasn't called.
         */
        if (save_Log_duration)
-               gettimeofday(&start_t, &tz);
+               gettimeofday(&start_t, NULL);
 
        /*
         * Start up a transaction command.      All queries generated by the
@@ -943,15 +942,15 @@ pg_exec_query_string(StringInfo query_string,     /* string to execute */
 
        if (save_Log_duration)
        {
-               gettimeofday(&stop_t, &tz);
+               gettimeofday(&stop_t, NULL);
                if (stop_t.tv_usec < start_t.tv_usec)
                {
                        stop_t.tv_sec--;
                        stop_t.tv_usec += 1000000;
                }
                elog(LOG, "duration: %ld.%06ld sec",
-                        (long int) stop_t.tv_sec - start_t.tv_sec,
-                        (long int) stop_t.tv_usec - start_t.tv_usec);
+                        (long) (stop_t.tv_sec - start_t.tv_sec),
+                        (long) (stop_t.tv_usec - start_t.tv_usec));
        }
 
        debug_query_string = NULL;
@@ -1783,7 +1782,7 @@ PostgresMain(int argc, char *argv[], const char *username)
        if (!IsUnderPostmaster)
        {
                puts("\nPOSTGRES backend interactive interface ");
-               puts("$Revision: 1.305 $ $Date: 2002/10/19 20:15:09 $\n");
+               puts("$Revision: 1.306 $ $Date: 2002/10/24 23:19:13 $\n");
        }
 
        /*
@@ -2081,12 +2080,10 @@ struct timeval Save_t;
 void
 ResetUsage(void)
 {
-       struct timezone tz;
-
        getrusage(RUSAGE_SELF, &Save_r);
-       gettimeofday(&Save_t, &tz);
+       gettimeofday(&Save_t, NULL);
        ResetBufferUsage();
-/*       ResetTupleCount(); */
+       /* ResetTupleCount(); */
 }
 
 void
@@ -2096,12 +2093,11 @@ ShowUsage(const char *title)
        struct timeval user,
                                sys;
        struct timeval elapse_t;
-       struct timezone tz;
        struct rusage r;
        char       *bufusage;
 
        getrusage(RUSAGE_SELF, &r);
-       gettimeofday(&elapse_t, &tz);
+       gettimeofday(&elapse_t, NULL);
        memcpy((char *) &user, (char *) &r.ru_utime, sizeof(user));
        memcpy((char *) &sys, (char *) &r.ru_stime, sizeof(sys));
        if (elapse_t.tv_usec < Save_t.tv_usec)
@@ -2133,18 +2129,18 @@ ShowUsage(const char *title)
        appendStringInfo(&str, "! system usage stats:\n");
        appendStringInfo(&str,
                        "!\t%ld.%06ld elapsed %ld.%06ld user %ld.%06ld system sec\n",
-                                        (long int) elapse_t.tv_sec - Save_t.tv_sec,
-                                        (long int) elapse_t.tv_usec - Save_t.tv_usec,
-                                  (long int) r.ru_utime.tv_sec - Save_r.ru_utime.tv_sec,
-                                (long int) r.ru_utime.tv_usec - Save_r.ru_utime.tv_usec,
-                                  (long int) r.ru_stime.tv_sec - Save_r.ru_stime.tv_sec,
-                               (long int) r.ru_stime.tv_usec - Save_r.ru_stime.tv_usec);
+                                        (long) (elapse_t.tv_sec - Save_t.tv_sec),
+                                        (long) (elapse_t.tv_usec - Save_t.tv_usec),
+                                        (long) (r.ru_utime.tv_sec - Save_r.ru_utime.tv_sec),
+                                        (long) (r.ru_utime.tv_usec - Save_r.ru_utime.tv_usec),
+                                        (long) (r.ru_stime.tv_sec - Save_r.ru_stime.tv_sec),
+                                        (long) (r.ru_stime.tv_usec - Save_r.ru_stime.tv_usec));
        appendStringInfo(&str,
                                         "!\t[%ld.%06ld user %ld.%06ld sys total]\n",
-                                        (long int) user.tv_sec,
-                                        (long int) user.tv_usec,
-                                        (long int) sys.tv_sec,
-                                        (long int) sys.tv_usec);
+                                        (long) user.tv_sec,
+                                        (long) user.tv_usec,
+                                        (long) sys.tv_sec,
+                                        (long) sys.tv_usec);
 /* BeOS has rusage but only has some fields, and not these... */
 #if defined(HAVE_GETRUSAGE)
        appendStringInfo(&str,