diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2018-11-21 15:02:37 -0300 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2018-11-21 15:04:25 -0300 |
commit | 6f7d02aa60b711c2a61d12b2f2f7ff4c5d5d6df4 (patch) | |
tree | becd7d89575e4110eb491d2a7b6e0e0726c671b7 | |
parent | 7306d5e920deb16f781797640715bf03f8d50d8c (diff) | |
download | postgresql-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.c | 10 | ||||
-rw-r--r-- | 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 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 */ |