summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/activity/pgstat_backend.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/backend/utils/activity/pgstat_backend.c b/src/backend/utils/activity/pgstat_backend.c
index 187c5c76e1e..f6aaf589866 100644
--- a/src/backend/utils/activity/pgstat_backend.c
+++ b/src/backend/utils/activity/pgstat_backend.c
@@ -133,10 +133,6 @@ pgstat_fetch_stat_backend_by_pid(int pid, BackendType *bktype)
if (!pgstat_tracks_backend_bktype(beentry->st_backendType))
return NULL;
- backend_stats = pgstat_fetch_stat_backend(procNumber);
- if (!backend_stats)
- return NULL;
-
/* if PID does not match, leave */
if (beentry->st_procpid != pid)
return NULL;
@@ -144,6 +140,18 @@ pgstat_fetch_stat_backend_by_pid(int pid, BackendType *bktype)
if (bktype)
*bktype = beentry->st_backendType;
+ /*
+ * Retrieve the entry. Note that "beentry" may be freed depending on the
+ * value of stats_fetch_consistency, so do not access it from this point.
+ */
+ backend_stats = pgstat_fetch_stat_backend(procNumber);
+ if (!backend_stats)
+ {
+ if (bktype)
+ *bktype = B_INVALID;
+ return NULL;
+ }
+
return backend_stats;
}