Dead code or buggy code?

From: Greg Stark <stark(at)mit(dot)edu>
To: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Dead code or buggy code?
Date: 2013-09-18 22:20:21
Message-ID: CAM-w4HOySQ4p3MVBFS4C0=3+KQ1AJDJ-Oi-62=aNTFB7AJGXfg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

The following code is in the ProcSleep at proc.c:1138.
GetBlockingAutoVacuumPgproc() should presumably always return a vacuum
pgproc entry since the deadlock state says it's blocked by autovacuum.
But I'm not really familiar enough with this codepath to know whether
there's not a race condition here where it can sometimes return null.
The following code checks autovac != NULL but the PGXACT initializer
would have seg faulted if it returned NULL if that's possible.

if (deadlock_state == DS_BLOCKED_BY_AUTOVACUUM &&
allow_autovacuum_cancel)
{
PGPROC *autovac = GetBlockingAutoVacuumPgproc();
PGXACT *autovac_pgxact =
&ProcGlobal->allPgXact[autovac->pgprocno];

LWLockAcquire(ProcArrayLock, LW_EXCLUSIVE);

/*
* Only do it if the worker is not working to protect against Xid
* wraparound.
*/
if ((autovac != NULL) &&
(autovac_pgxact->vacuumFlags & PROC_IS_AUTOVACUUM) &&
!(autovac_pgxact->vacuumFlags & PROC_VACUUM_FOR_WRAPAROUND))
{

--
greg

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Noah Misch 2013-09-18 22:26:10 Re: relscan_details.h
Previous Message Hannu Krosing 2013-09-18 21:49:50 Re: record identical operator