From: Alvaro Herrera Date: Wed, 21 Nov 2018 18:02:37 +0000 (-0300) Subject: instr_time.h: add INSTR_TIME_SET_CURRENT_LAZY X-Git-Tag: REL_12_BETA1~1181 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6f7d02aa60b7;p=postgresql 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 --- 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 */