From 6f7d02aa60b711c2a61d12b2f2f7ff4c5d5d6df4 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Wed, 21 Nov 2018 15:02:37 -0300 Subject: [PATCH] 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 --- src/backend/executor/instrument.c | 10 +++------- src/include/portability/instr_time.h | 8 ++++++++ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/backend/executor/instrument.c b/src/backend/executor/instrument.c index fe5d55904d..0f2da22148 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 f968444671..60984905b2 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 */ -- 2.40.0