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
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 |