summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Munro2021-03-10 09:22:12 +0000
committerThomas Munro2021-03-10 10:20:41 +0000
commitc427de427ac411039d5efd5d0dcc8a4e0c6da68d (patch)
treed6b9911e20ad3efe572d5e18e5136b20acafb28a
parent68b34b2338f013cb025dea360b37a3b4fc930179 (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.c25
-rw-r--r--src/include/portability/instr_time.h28
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 */