]> granicus.if.org Git - postgresql/commit
Make pgstat tabstat lookup hash table less fragile.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 15 May 2017 02:52:41 +0000 (22:52 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 15 May 2017 02:52:49 +0000 (22:52 -0400)
commit5d00b764cd682f6071b35033f508a431d9d3f920
tree5d7b273dbb651f0a2a94491e9c9432e4c171a6c9
parentb91e5b4684d840c903a78e86700b9d906033c2ad
Make pgstat tabstat lookup hash table less fragile.

Code review for commit 090010f2e.

Fix cases where an elog(ERROR) partway through a function would leave the
persistent data structures in a corrupt state.  pgstat_report_stat got this
wrong by invalidating PgStat_TableEntry structs before removing hashtable
entries pointing to them, and get_tabstat_entry got it wrong by ignoring
the possibility of palloc failure after it had already created a hashtable
entry.

Also, avoid leaking a memory context per transaction, which the previous
code did through misunderstanding hash_create's API.  We do not need to
create a context to hold the hash table; hash_create will do that.
(The leak wasn't that large, amounting to only a memory context header
per iteration, but it's still surprising that nobody noticed it yet.)
src/backend/postmaster/pgstat.c