Re: Failure while inserting parent tuple to B-tree is not fun
От | Peter Geoghegan |
---|---|
Тема | Re: Failure while inserting parent tuple to B-tree is not fun |
Дата | |
Msg-id | CAM3SWZTORu0L2AdUGSk9KMOtW3vCqCb14vjfDTHTwYEracYcQA@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Failure while inserting parent tuple to B-tree is not fun (Heikki Linnakangas <hlinnakangas@vmware.com>) |
Ответы |
Re: Failure while inserting parent tuple to B-tree is not
fun
|
Список | pgsql-hackers |
On Fri, Jan 31, 2014 at 9:09 AM, Heikki Linnakangas <hlinnakangas@vmware.com> wrote: > I refactored the loop in _bt_moveright to, well, not have that bug anymore. > The 'page' and 'opaque' pointers are now fetched at the beginning of the > loop. Did I miss something? I think so, yes. You still aren't assigning the value returned by _bt_getbuf() to 'buf'. Since, as I mentioned, _bt_finish_split() ultimately unlocks *and unpins*, it may not be the same buffer as before, so even with the refactoring there are race conditions. A closely related issue is that you haven't mentioned anything about buffer pins/refcount side effects in comments above _bt_finish_split(), even though I believe you should. A minor stylistic concern is that I think it would be better to only have one pair of _bt_finish_split()/_bt_getbuf() calls regardless of the initial value of 'access'. -- Peter Geoghegan
В списке pgsql-hackers по дате отправления: