diff --git a/src/backend/storage/freespace/fsmpage.c b/src/backend/storage/freespace/fsmpage.c index 3a25c959299bf574f8c3900f4cbee8cb6a5ff7ae..a4479e88c075dce8bbcaad03ea08a5859750966d 100644 --- a/src/backend/storage/freespace/fsmpage.c +++ b/src/backend/storage/freespace/fsmpage.c @@ -8,7 +8,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/storage/freespace/fsmpage.c,v 1.2 2008/10/07 21:10:11 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/storage/freespace/fsmpage.c,v 1.3 2008/12/10 17:11:18 tgl Exp $ * * NOTES: * @@ -243,17 +243,20 @@ fsm_search_avail(Buffer buf, uint8 minvalue, bool advancenext, */ while (nodeno < NonLeafNodesPerPage) { - int leftnodeno = leftchild(nodeno); - int rightnodeno = leftnodeno + 1; - bool leftok = (leftnodeno < NodesPerPage) && - (fsmpage->fp_nodes[leftnodeno] >= minvalue); - bool rightok = (rightnodeno < NodesPerPage) && - (fsmpage->fp_nodes[rightnodeno] >= minvalue); - - if (leftok) - nodeno = leftnodeno; - else if (rightok) - nodeno = rightnodeno; + int childnodeno = leftchild(nodeno); + + if (childnodeno < NodesPerPage && + fsmpage->fp_nodes[childnodeno] >= minvalue) + { + nodeno = childnodeno; + continue; + } + childnodeno++; /* point to right child */ + if (childnodeno < NodesPerPage && + fsmpage->fp_nodes[childnodeno] >= minvalue) + { + nodeno = childnodeno; + } else { /*