Re: Dead code or buggy code?

From: Robert Haas <robertmhaas(at)gmail(dot)com>
To: Greg Stark <stark(at)mit(dot)edu>
Cc: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Dead code or buggy code?
Date: 2013-09-19 17:51:54
Message-ID: CA+TgmoazxQ+6fbERKDgsC2wiB=v3YenCiC0yQtXH_rh=knrt9A@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Wed, Sep 18, 2013 at 6:20 PM, Greg Stark <stark(at)mit(dot)edu> wrote:
> 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))
> {

Hmm, yeah. I remember noticing this some time ago but never got
around to fixing it. +1 for rearranging things there somehow.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Robert Haas 2013-09-19 17:54:41 Re: Where to load modules from?
Previous Message Misa Simic 2013-09-19 17:27:17 Re: Not In Foreign Key Constraint