diff options
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/postmaster/pgstat.c | 51 |
1 files changed, 27 insertions, 24 deletions
diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index f71fdeb1422..6672b8bae51 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -2563,7 +2563,7 @@ pgstat_bestart(void) beentry = MyBEEntry; do { - beentry->st_changecount++; + pgstat_increment_changecount_before(beentry); } while ((beentry->st_changecount & 1) == 0); beentry->st_procpid = MyProcPid; @@ -2588,8 +2588,7 @@ pgstat_bestart(void) beentry->st_appname[NAMEDATALEN - 1] = '\0'; beentry->st_activity[pgstat_track_activity_query_size - 1] = '\0'; - beentry->st_changecount++; - Assert((beentry->st_changecount & 1) == 0); + pgstat_increment_changecount_after(beentry); /* Update app name to current GUC setting */ if (application_name) @@ -2624,12 +2623,11 @@ pgstat_beshutdown_hook(int code, Datum arg) * before and after. We use a volatile pointer here to ensure the * compiler doesn't try to get cute. */ - beentry->st_changecount++; + pgstat_increment_changecount_before(beentry); beentry->st_procpid = 0; /* mark invalid */ - beentry->st_changecount++; - Assert((beentry->st_changecount & 1) == 0); + pgstat_increment_changecount_after(beentry); } @@ -2666,7 +2664,7 @@ pgstat_report_activity(BackendState state, const char *cmd_str) * non-disabled state. As our final update, change the state and * clear fields we will not be updating anymore. */ - beentry->st_changecount++; + pgstat_increment_changecount_before(beentry); beentry->st_state = STATE_DISABLED; beentry->st_state_start_timestamp = 0; beentry->st_activity[0] = '\0'; @@ -2674,8 +2672,7 @@ pgstat_report_activity(BackendState state, const char *cmd_str) /* st_xact_start_timestamp and st_waiting are also disabled */ beentry->st_xact_start_timestamp = 0; beentry->st_waiting = false; - beentry->st_changecount++; - Assert((beentry->st_changecount & 1) == 0); + pgstat_increment_changecount_after(beentry); } return; } @@ -2695,7 +2692,7 @@ pgstat_report_activity(BackendState state, const char *cmd_str) /* * Now update the status entry */ - beentry->st_changecount++; + pgstat_increment_changecount_before(beentry); beentry->st_state = state; beentry->st_state_start_timestamp = current_timestamp; @@ -2707,8 +2704,7 @@ pgstat_report_activity(BackendState state, const char *cmd_str) beentry->st_activity_start_timestamp = start_timestamp; } - beentry->st_changecount++; - Assert((beentry->st_changecount & 1) == 0); + pgstat_increment_changecount_after(beentry); } /* ---------- @@ -2734,13 +2730,12 @@ pgstat_report_appname(const char *appname) * st_changecount before and after. We use a volatile pointer here to * ensure the compiler doesn't try to get cute. */ - beentry->st_changecount++; + pgstat_increment_changecount_before(beentry); memcpy((char *) beentry->st_appname, appname, len); beentry->st_appname[len] = '\0'; - beentry->st_changecount++; - Assert((beentry->st_changecount & 1) == 0); + pgstat_increment_changecount_after(beentry); } /* @@ -2760,10 +2755,9 @@ pgstat_report_xact_timestamp(TimestampTz tstamp) * st_changecount before and after. We use a volatile pointer here to * ensure the compiler doesn't try to get cute. */ - beentry->st_changecount++; + pgstat_increment_changecount_before(beentry); beentry->st_xact_start_timestamp = tstamp; - beentry->st_changecount++; - Assert((beentry->st_changecount & 1) == 0); + pgstat_increment_changecount_after(beentry); } /* ---------- @@ -2839,7 +2833,10 @@ pgstat_read_current_status(void) */ for (;;) { - int save_changecount = beentry->st_changecount; + int before_changecount; + int after_changecount; + + pgstat_save_changecount_before(beentry, before_changecount); localentry->backendStatus.st_procpid = beentry->st_procpid; if (localentry->backendStatus.st_procpid > 0) @@ -2856,8 +2853,9 @@ pgstat_read_current_status(void) localentry->backendStatus.st_activity = localactivity; } - if (save_changecount == beentry->st_changecount && - (save_changecount & 1) == 0) + pgstat_save_changecount_after(beentry, after_changecount); + if (before_changecount == after_changecount && + (before_changecount & 1) == 0) break; /* Make sure we can break out of loop if stuck... */ @@ -2927,12 +2925,17 @@ pgstat_get_backend_current_activity(int pid, bool checkUser) for (;;) { - int save_changecount = vbeentry->st_changecount; + int before_changecount; + int after_changecount; + + pgstat_save_changecount_before(vbeentry, before_changecount); found = (vbeentry->st_procpid == pid); - if (save_changecount == vbeentry->st_changecount && - (save_changecount & 1) == 0) + pgstat_save_changecount_after(vbeentry, after_changecount); + + if (before_changecount == after_changecount && + (before_changecount & 1) == 0) break; /* Make sure we can break out of loop if stuck... */ |