88 *
99 *
1010 * IDENTIFICATION
11- * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.71 2000/12/28 13:00:07 vadim Exp $
11+ * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.72 2000/12/29 20:47:16 vadim Exp $
1212 *
1313 *-------------------------------------------------------------------------
1414 */
@@ -518,12 +518,17 @@ _bt_insertonpg(Relation rel,
518518}
519519else
520520{
521+ START_CRIT_CODE ;
522+ _bt_pgaddtup (rel ,page ,itemsz ,btitem ,newitemoff ,"page" );
523+ itup_off = newitemoff ;
524+ itup_blkno = BufferGetBlockNumber (buf );
521525/* XLOG stuff */
522526{
523527xl_btree_insert xlrec ;
524528uint8 flag = XLOG_BTREE_INSERT ;
525529XLogRecPtr recptr ;
526530XLogRecData rdata [2 ];
531+ BTItemData truncitem ;
527532
528533xlrec .target .node = rel -> rd_node ;
529534ItemPointerSet (& (xlrec .target .tid ),BufferGetBlockNumber (buf ),newitemoff );
@@ -535,8 +540,7 @@ _bt_insertonpg(Relation rel,
535540/* Read comments in _bt_pgaddtup */
536541if (!(P_ISLEAF (lpageop ))& & newitemoff == P_FIRSTDATAKEY (lpageop ))
537542{
538- BTItemData truncitem = * btitem ;
539-
543+ truncitem = * btitem ;
540544truncitem .bti_itup .t_info = sizeof (BTItemData );
541545rdata [1 ].data = (char * )& truncitem ;
542546rdata [1 ].len = sizeof (BTItemData );
@@ -559,9 +563,7 @@ _bt_insertonpg(Relation rel,
559563PageSetSUI (page ,ThisStartUpID );
560564}
561565
562- _bt_pgaddtup (rel ,page ,itemsz ,btitem ,newitemoff ,"page" );
563- itup_off = newitemoff ;
564- itup_blkno = BufferGetBlockNumber (buf );
566+ END_CRIT_CODE ;
565567/* Write out the updated page and release pin/lock */
566568_bt_wrtbuf (rel ,buf );
567569}
@@ -600,7 +602,6 @@ _bt_split(Relation rel, Buffer buf, OffsetNumber firstright,
600602oopaque ;
601603Buffer sbuf = 0 ;
602604Page spage = 0 ;
603- BTPageOpaque sopaque ;
604605Size itemsz ;
605606ItemId itemid ;
606607BTItem item ;
@@ -821,6 +822,9 @@ _bt_split(Relation rel, Buffer buf, OffsetNumber firstright,
821822
822823if (!P_RIGHTMOST (ropaque ))
823824{
825+ BTPageOpaque sopaque = (BTPageOpaque )PageGetSpecialPointer (spage );
826+ sopaque -> btpo_prev = BufferGetBlockNumber (rbuf );
827+
824828rdata [2 ].next = & (rdata [3 ]);
825829rdata [3 ].buffer = sbuf ;
826830rdata [3 ].data = NULL ;
@@ -856,14 +860,9 @@ _bt_split(Relation rel, Buffer buf, OffsetNumber firstright,
856860
857861PageRestoreTempPage (leftpage ,origpage );
858862
863+ /* write and release the old right sibling */
859864if (!P_RIGHTMOST (ropaque ))
860- {
861- sopaque = (BTPageOpaque )PageGetSpecialPointer (spage );
862- sopaque -> btpo_prev = BufferGetBlockNumber (rbuf );
863-
864- /* write and release the old right sibling */
865865_bt_wrtbuf (rel ,sbuf );
866- }
867866END_CRIT_CODE ;
868867
869868/* split's done */