#define MAX_SIGNAL_TRIES 600 /* max wait 60.0 sec */
for (ntries = 0;; ntries++)
{
- volatile PROC_HDR *procglobal = ProcGlobal;
- ProcNumber checkpointerProc = pg_atomic_read_u32(&procglobal->checkpointerProc);
+ ProcNumber checkpointerProc = pg_atomic_read_u32(&ProcGlobal->checkpointerProc);
if (checkpointerProc == INVALID_PROC_NUMBER)
{
void
WakeupCheckpointer(void)
{
- volatile PROC_HDR *procglobal = ProcGlobal;
- ProcNumber checkpointerProc = pg_atomic_read_u32(&procglobal->checkpointerProc);
+ ProcNumber checkpointerProc = pg_atomic_read_u32(&ProcGlobal->checkpointerProc);
if (checkpointerProc != INVALID_PROC_NUMBER)
SetLatch(&GetPGProcByNumber(checkpointerProc)->procLatch);
*/
PGSemaphoreReset(MyProc->sem);
+ /* autovacuum launcher is specially advertised in ProcGlobal */
+ if (MyBackendType == B_AUTOVAC_LAUNCHER)
+ pg_atomic_write_u32(&ProcGlobal->avLauncherProc, MyProcNumber);
+
/*
* Arrange to clean up at backend exit.
*/
PGSemaphoreReset(MyProc->sem);
/* Some aux processes are also advertised in ProcGlobal */
- if (MyBackendType == B_AUTOVAC_LAUNCHER)
- pg_atomic_write_u32(&ProcGlobal->avLauncherProc, MyProcNumber);
if (MyBackendType == B_WAL_WRITER)
pg_atomic_write_u32(&ProcGlobal->walwriterProc, MyProcNumber);
if (MyBackendType == B_CHECKPOINTER)
SwitchBackToLocalLatch();
DisownLatch(&MyProc->procLatch);
+ if (MyBackendType == B_AUTOVAC_LAUNCHER)
+ {
+ Assert(pg_atomic_read_u32(&ProcGlobal->avLauncherProc) == MyProcNumber);
+ pg_atomic_write_u32(&ProcGlobal->avLauncherProc, INVALID_PROC_NUMBER);
+ }
+
proc = MyProc;
procgloballist = proc->procgloballist;
/*
* If this was one of the aux processes advertised in ProcGlobal, clear it
*/
- if (MyBackendType == B_AUTOVAC_LAUNCHER)
- {
- Assert(pg_atomic_read_u32(&ProcGlobal->avLauncherProc) == MyProcNumber);
- pg_atomic_write_u32(&ProcGlobal->avLauncherProc, INVALID_PROC_NUMBER);
- }
if (MyBackendType == B_WAL_WRITER)
{
Assert(pg_atomic_read_u32(&ProcGlobal->walwriterProc) == MyProcNumber);
* Current proc numbers of some auxiliary processes. There can be only one
* of each of these running at a time.
*/
- pg_atomic_uint32 avLauncherProc;
pg_atomic_uint32 walwriterProc;
pg_atomic_uint32 checkpointerProc;
+ /* avlauncher is not an aux process, but it is advertised the same way */
+ pg_atomic_uint32 avLauncherProc;
/* Current shared estimate of appropriate spins_per_delay value */
int spins_per_delay;