From d56a72afeca98d99261ccb5f684c4e3756fe4614 Mon Sep 17 00:00:00 2001 From: Konstantin Knizhnik Date: Thu, 24 Jul 2025 21:10:51 +0300 Subject: [PATCH] Reset backend's perf cpounters on exit --- pgxn/neon/neon_perf_counters.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/pgxn/neon/neon_perf_counters.c b/pgxn/neon/neon_perf_counters.c index 2a7af15560..f9ee59c325 100644 --- a/pgxn/neon/neon_perf_counters.c +++ b/pgxn/neon/neon_perf_counters.c @@ -43,12 +43,31 @@ NeonPerfCountersShmemRequest(void) } +static int my_proc_num = -1; + static void -NeonPerfCountersReset(int code, Datum arg) +my_perf_counters_reset(int code, Datum arg) { - memset(MyNeonCounters, 0, sizeof(*MyNeonCounters)); + Assert(my_proc_num >= 0); + memset(&neon_per_backend_counters_shared[my_proc_num], 0, sizeof(neon_per_backend_counters)); } +neon_per_backend_counters* +get_my_perf_counters(void) +{ + if (my_proc_num < 0) + { +#if PG_MAJORVERSION_NUM < 17 + my_proc_num = MyProc->pgprocno; +#else + my_proc_num = MyProcNumber; +#endif + on_shmem_exit(my_perf_counters_reset, 0); + } + return &neon_per_backend_counters_shared[my_proc_num]; +} + + void NeonPerfCountersShmemInit(void) { @@ -64,7 +83,6 @@ NeonPerfCountersShmemInit(void) { /* shared memory is initialized to zeros, so nothing to do here */ } - on_shmem_exit(NeonPerfCountersReset, 0); } static inline void