Re: BUG #17462: Invalid memory access in heapam_tuple_lock
От | Andres Freund |
---|---|
Тема | Re: BUG #17462: Invalid memory access in heapam_tuple_lock |
Дата | |
Msg-id | 20220411190042.o5ebdhc5qsejleff@alap3.anarazel.de обсуждение исходный текст |
Ответ на | Re: BUG #17462: Invalid memory access in heapam_tuple_lock (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: BUG #17462: Invalid memory access in heapam_tuple_lock
|
Список | pgsql-bugs |
Hi, On 2022-04-11 13:51:38 -0400, Tom Lane wrote: > Andres Freund <andres@anarazel.de> writes: > > One way to address it in a way not requiring an API break would be to pass > > SnapshotAny to heap_fetch and then do an explicit visibility check "ourselves" > > in heapam_lock_tuple(). > > I'm not really interested in fixing this without an API break (going > forward anyway), because as it stands heap_fetch is just an invitation > to make this same mistake again. My suggestion was about the back branch situation... But it seems viable going forward as well, if we we reset tuple->t_data in the !valid case. As you say: > It should never return a tuple pointer if we don't keep the pin on the > associated buffer. Agreed. If tuple->t_data were reset in the !valid case, not just the !ItemIdIsNormal() case, bug would have been noticed immediately (isolation tests do fail, I checked). Another approach is to extend the SatisfiesDirty approach and store the tid of the next tuple version in addition the xmin/xmax we already store. And have heap_fetch() always set t_data to NULL if the snapshot check fails. Greetings, Andres Freund
В списке pgsql-bugs по дате отправления: