From bd19e8f60488c1861b43f20931e64fe0468d309a Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 24 Oct 2002 23:19:13 +0000 Subject: [PATCH] Fix some places that were unportably assuming struct timeval's tv_sec field is signed. Clean up casting. --- src/backend/postmaster/pgstat.c | 28 ++++++++++++++-------- src/backend/tcop/postgres.c | 42 +++++++++++++++------------------ 2 files changed, 37 insertions(+), 33 deletions(-) diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index d7da6177d0..17c11682cf 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -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; + } + } } /* diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 585e55ef6b..393b6955ce 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -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,