Skip to content
Snippets Groups Projects
Commit 19cd31b0 authored by Tom Lane's avatar Tom Lane
Browse files

Fix bug introduced into _bt_getstackbuf() on 2003-Feb-21: the initial

value of 'start' could be past the end of the page, if the page was
split by some concurrent inserting process since we visited it.  In
this situation the code could look at bogus entries and possibly find
a match (since after all those entries still contain what they had
before the split).  This would lead to 'specified item offset is too large'
followed by 'PANIC: failed to add item to the page', as reported by Joe
Conway for scenarios involving heavy concurrent insertion activity.
parent fcaad7e2
Branches
Tags
No related merge requests found
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.113 2004/07/21 22:31:19 tgl Exp $ * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.114 2004/08/17 23:15:33 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -1311,6 +1311,13 @@ _bt_getstackbuf(Relation rel, BTStack stack, int access) ...@@ -1311,6 +1311,13 @@ _bt_getstackbuf(Relation rel, BTStack stack, int access)
if (start < minoff) if (start < minoff)
start = minoff; start = minoff;
/*
* Need this check too, to guard against possibility that page
* split since we visited it originally.
*/
if (start > maxoff)
start = OffsetNumberNext(maxoff);
/* /*
* These loops will check every item on the page --- but in an * These loops will check every item on the page --- but in an
* order that's attuned to the probability of where it * order that's attuned to the probability of where it
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment