Re: Re: check failure with -DRELCACHE_FORCE_RELEASE -DCLOBBER_FREED_MEMORY
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Andrew Dunstan <andrew.dunstan@2ndquadrant.com>
Cc: PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2017-03-04T20:41:53Z
Lists: pgsql-hackers
Andrew Dunstan <andrew.dunstan@2ndquadrant.com> writes:
> On 03/03/2017 02:24 PM, Andrew Dunstan wrote:
>> I have been setting up a buildfarm member with -DRELCACHE_FORCE_RELEASE
>> -DCLOBBER_FREED_MEMORY, settings which Alvaro suggested to me.I got core
>> dumps with these stack traces. The platform is Amazon Linux.
> I have replicated this on a couple of other platforms (Fedora, FreeBSD)
> and back to 9.5. The same failure doesn't happen with buildfarm runs on
> earlier branches, although possibly they don't have the same set of tests.
well, the problem in rebuild_relation() seems pretty blatant:
/* Close relcache entry, but keep lock until transaction commit */
heap_close(OldHeap, NoLock);
/* Create the transient table that will receive the re-ordered data */
OIDNewHeap = make_new_heap(tableOid, tableSpace,
OldHeap->rd_rel->relpersistence,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AccessExclusiveLock);
There are two such references after the heap_close. I don't know that
those are the only bugs, but this reference is certainly the proximate
cause of the crash I'm seeing.
Will push a fix in a little bit.
regards, tom lane
Commits
-
Avoid dangling pointer to relation name in RLS code path in DoCopy().
- a8df75b0a470 10.0 landed
- 943140d572ad 9.6.3 landed
- 420d9ec0aebb 9.5.7 landed
-
In rebuild_relation(), don't access an already-closed relcache entry.
- dbca84f04ed5 10.0 landed
- 807df31d19e7 9.5.7 landed
- 68f7b91e509d 9.6.3 landed