Fix autovacuum cancellation.
authorAndres Freund <andres@anarazel.de>
Tue, 8 Sep 2020 18:25:34 +0000 (11:25 -0700)
committerAndres Freund <andres@anarazel.de>
Tue, 8 Sep 2020 18:25:34 +0000 (11:25 -0700)
The problem is caused by me (Andres) having ProcSleep() look at the
wrong PGPROC entry in 5788e258bb2.

Unfortunately it seems hard to write a reliable test for autovacuum
cancellations. Perhaps somebody will come up with a good approach, but
it seems worth fixing the issue even without a test.

Reported-By: Jeff Janes <jeff.janes@gmail.com>
Author: Jeff Janes <jeff.janes@gmail.com>
Discussion: https://postgr.es/m/CAMkU=1wH2aUy+wDRDz+5RZALdcUnEofV1t9PzXS_gBJO9vZZ0Q@mail.gmail.com

src/backend/storage/lmgr/proc.c

index aa9fbd80545bc2248e7f72710febea8049f41ad1..19a9f9394921afbd27c2ae5fc35146d83da5ac95 100644 (file)
@@ -1318,7 +1318,7 @@ ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable)
             * Only do it if the worker is not working to protect against Xid
             * wraparound.
             */
-           vacuumFlags = ProcGlobal->vacuumFlags[proc->pgxactoff];
+           vacuumFlags = ProcGlobal->vacuumFlags[autovac->pgxactoff];
            if ((vacuumFlags & PROC_IS_AUTOVACUUM) &&
                !(vacuumFlags & PROC_VACUUM_FOR_WRAPAROUND))
            {