diff options
author | Thomas Munro | 2021-03-10 09:22:12 +0000 |
---|---|---|
committer | Thomas Munro | 2021-03-10 10:20:41 +0000 |
commit | c427de427ac411039d5efd5d0dcc8a4e0c6da68d (patch) | |
tree | d6b9911e20ad3efe572d5e18e5136b20acafb28a | |
parent | 68b34b2338f013cb025dea360b37a3b4fc930179 (diff) |
Fix another portability bug in recent pgbench commit.
Commit 547f04e7 produced errors on AIX/xlc while building plpython. The
new code appears to be incompatible with the hack installed by commit
a11cf433. Without access to an AIX system to check, my guess is that
_POSIX_C_SOURCE may be required for <time.h> to declare the things the
header needs to see, but plpython.h undefines it.
For now, to unbreak build farm animal hoverfly, just move the new
pg_time_usec_t support into pgbench.c. Perhaps later we could figure
out what to rearrange to put it back into a header for wider use.
Discussion: https://postgr.es/m/CA%2BhUKG%2BP%2BjcD%3Dx9%2BagyTdWtjpOT64MYiGic%2Bcbu_TD8CV%3D6A3w%40mail.gmail.com
-rw-r--r-- | src/bin/pgbench/pgbench.c | 25 | ||||
-rw-r--r-- | src/include/portability/instr_time.h | 28 |
2 files changed, 25 insertions, 28 deletions
diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index e4dfbcf472..f6a214669c 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -321,6 +321,13 @@ typedef struct SimpleStats } SimpleStats; /* + * The instr_time type is expensive when dealing with time arithmetic. Define + * a type to hold microseconds instead. Type int64 is good enough for about + * 584500 years. + */ +typedef int64 pg_time_usec_t; + +/* * Data structure to hold various statistics: per-thread and per-script stats * are maintained and merged together. */ @@ -658,6 +665,24 @@ static const PsqlScanCallbacks pgbench_callbacks = { NULL, /* don't need get_variable functionality */ }; +static inline pg_time_usec_t +pg_time_now(void) +{ + instr_time now; + + INSTR_TIME_SET_CURRENT(now); + + return (pg_time_usec_t) INSTR_TIME_GET_MICROSEC(now); +} + +static inline void +pg_time_now_lazy(pg_time_usec_t *now) +{ + if ((*now) == 0) + (*now) = pg_time_now(); +} + +#define PG_TIME_GET_DOUBLE(t) (0.000001 * (t)) static void usage(void) diff --git a/src/include/portability/instr_time.h b/src/include/portability/instr_time.h index faf806a441..39a4f0600e 100644 --- a/src/include/portability/instr_time.h +++ b/src/include/portability/instr_time.h @@ -253,32 +253,4 @@ GetTimerFrequency(void) #define INSTR_TIME_SET_CURRENT_LAZY(t) \ (INSTR_TIME_IS_ZERO(t) ? INSTR_TIME_SET_CURRENT(t), true : false) -/* - * Simpler convenient interface - * - * The instr_time type is expensive when dealing with time arithmetic. - * Define a type to hold microseconds on top of this, suitable for - * benchmarking performance measures, eg in "pgbench". - * - * Type int64 is good enough for about 584500 years. - */ -typedef int64 pg_time_usec_t; - -static inline pg_time_usec_t -pg_time_now(void) -{ - instr_time now; - - INSTR_TIME_SET_CURRENT(now); - return (pg_time_usec_t) INSTR_TIME_GET_MICROSEC(now); -} - -static inline void -pg_time_now_lazy(pg_time_usec_t *now) -{ - if ((*now) == 0) - (*now) = pg_time_now(); -} - -#define PG_TIME_GET_DOUBLE(t) (0.000001 * (t)) #endif /* INSTR_TIME_H */ |