Fix intermittent crash in DROP INDEX CONCURRENTLY.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 6 Dec 2012 04:42:51 +0000 (23:42 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 6 Dec 2012 04:42:51 +0000 (23:42 -0500)
commite31d524867130d3c54b8d5f4c5ed59e2fcd07867
treec7aaae9c72dcdbab86da5e6a29df0cd32f9be11d
parent5e15cdb2ae7da5c1f9d8ca2ad970b98ca1cc4947
Fix intermittent crash in DROP INDEX CONCURRENTLY.

When deleteOneObject closes and reopens the pg_depend relation,
we must see to it that the relcache pointer held by the calling function
(typically performMultipleDeletions) is updated.  Usually the relcache
entry is retained so that the pointer value doesn't change, which is why
the problem had escaped notice ... but after a cache flush event there's
no guarantee that the same memory will be reassigned.  To fix, change
the recursive functions' APIs so that we pass around a "Relation *"
not just "Relation".

Per investigation of occasional buildfarm failures.  This is trivial
to reproduce with -DCLOBBER_CACHE_ALWAYS, which points up the sad
lack of any buildfarm member running that way on a regular basis.
src/backend/catalog/dependency.c