aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2018-11-21 15:02:37 -0300
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2018-11-21 15:04:25 -0300
commit6f7d02aa60b711c2a61d12b2f2f7ff4c5d5d6df4 (patch)
treebecd7d89575e4110eb491d2a7b6e0e0726c671b7
parent7306d5e920deb16f781797640715bf03f8d50d8c (diff)
downloadpostgresql-6f7d02aa60b711c2a61d12b2f2f7ff4c5d5d6df4.tar.gz
postgresql-6f7d02aa60b711c2a61d12b2f2f7ff4c5d5d6df4.zip
instr_time.h: add INSTR_TIME_SET_CURRENT_LAZY
Sets the timestamp to current if not already set. Will acquire more callers momentarily. Author: Fabien Coelho Discussion: https://postgr.es/m/alpine.DEB.2.21.1808111104320.1705@lancre
-rw-r--r--src/backend/executor/instrument.c10
-rw-r--r--src/include/portability/instr_time.h8
2 files changed, 11 insertions, 7 deletions
diff --git a/src/backend/executor/instrument.c b/src/backend/executor/instrument.c
index fe5d55904d2..0f2da221483 100644
--- a/src/backend/executor/instrument.c
+++ b/src/backend/executor/instrument.c
@@ -62,13 +62,9 @@ InstrInit(Instrumentation *instr, int instrument_options)
void
InstrStartNode(Instrumentation *instr)
{
- if (instr->need_timer)
- {
- if (INSTR_TIME_IS_ZERO(instr->starttime))
- INSTR_TIME_SET_CURRENT(instr->starttime);
- else
- elog(ERROR, "InstrStartNode called twice in a row");
- }
+ if (instr->need_timer &&
+ INSTR_TIME_SET_CURRENT_LAZY(instr->starttime))
+ elog(ERROR, "InstrStartNode called twice in a row");
/* save buffer usage totals at node entry, if needed */
if (instr->need_bufusage)
diff --git a/src/include/portability/instr_time.h b/src/include/portability/instr_time.h
index f968444671c..60984905b25 100644
--- a/src/include/portability/instr_time.h
+++ b/src/include/portability/instr_time.h
@@ -20,6 +20,9 @@
*
* INSTR_TIME_SET_CURRENT(t) set t to current time
*
+ * INSTR_TIME_SET_CURRENT_LAZY(t) set t to current time if t is zero,
+ * evaluates to whether t changed
+ *
* INSTR_TIME_ADD(x, y) x += y
*
* INSTR_TIME_SUBTRACT(x, y) x -= y
@@ -245,4 +248,9 @@ GetTimerFrequency(void)
#endif /* WIN32 */
+/* same macro on all platforms */
+
+#define INSTR_TIME_SET_CURRENT_LAZY(t) \
+ (INSTR_TIME_IS_ZERO(t) ? INSTR_TIME_SET_CURRENT(t), true : false)
+
#endif /* INSTR_TIME_H */