Re: BUG #17994: Invalidating relcache corrupts tupDesc inside ExecEvalFieldStoreDeForm()
Andrew Dunstan <andrew@dunslane.net>
From: Andrew Dunstan <andrew@dunslane.net>
To: Alvaro Herrera <alvherre@alvh.no-ip.org>
Cc: Andres Freund <andres@anarazel.de>, Tom Lane <tgl@sss.pgh.pa.us>,
exclusion@gmail.com, pgsql-bugs@lists.postgresql.org
Date: 2023-08-21T16:04:14Z
Lists: pgsql-bugs
On 2023-08-21 Mo 08:33, Alvaro Herrera wrote:
> Hello,
>
> On 2023-Jul-12, Andrew Dunstan wrote:
>
>> + entry = hash_search(missing_cache, &key, HASH_ENTER, &found);
>> +
>> + if (!found)
>> + {
>> + /* cache miss, so we need a non-transient copy of the datum */
>> + oldctx = MemoryContextSwitchTo(TopMemoryContext);
>> + entry->value =
>> + datumCopy(attrmiss->am_value, false, att->attlen);
>> + MemoryContextSwitchTo(oldctx);
>> + }
> Hmm ... when exactly do these values get freed if no longer needed? Is
> the theory that leaking them is not relevant?
Not sure I understand "relevant" here. They don't get freed. There will
be at most one entry per row in pg_attribute where atthasmissing is
true. I originally suggested cleaning them up at transaction end, but
there was an argument that that might not make them sufficiently
long-lived, and I don't know of any time more coarse grained when we can
conveniently clean them up.
cheers
andrew
--
Andrew Dunstan
EDB:https://www.enterprisedb.com
Commits
-
Cache by-reference missing values in a long lived context
- 2d13dab048a7 11.22 landed
- f938acd68b08 16.0 landed
- a68458108512 17.0 landed
- 75f323aa1c1e 15.5 landed
- 7f4515a58ebd 14.10 landed
- 1bb619d4d628 13.13 landed
- 01993ac748fd 12.17 landed
-
Fix order of operations in ExecEvalFieldStoreDeForm().
- d0ab203bc192 13.12 landed
- cc8cca3c2d60 15.4 landed
- 7f11b7a9cf18 11.21 landed
- 53b93e853ffe 12.16 landed
- 43af714defa0 16.0 landed
- 0789b82a9792 14.9 landed