diff options
Diffstat (limited to 'src/backend/access')
-rw-r--r-- | src/backend/access/heap/heapam.c | 12 | ||||
-rw-r--r-- | src/backend/access/nbtree/nbtinsert.c | 6 | ||||
-rw-r--r-- | src/backend/access/nbtree/nbtpage.c | 6 | ||||
-rw-r--r-- | src/backend/access/transam/xact.c | 6 | ||||
-rw-r--r-- | src/backend/access/transam/xlog.c | 26 |
5 files changed, 42 insertions, 14 deletions
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index f345df7cc11..ac5c15491c8 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.98 2000/11/30 18:38:45 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.99 2000/12/03 10:27:25 vadim Exp $ * * * INTERFACE ROUTINES @@ -1358,6 +1358,7 @@ heap_insert(Relation relation, HeapTuple tup) buffer = RelationGetBufferForTuple(relation, tup->t_len); /* NO ELOG(ERROR) from here till changes are logged */ + START_CRIT_CODE; RelationPutHeapTuple(relation, buffer, tup); /* XLOG stuff */ @@ -1381,6 +1382,7 @@ heap_insert(Relation relation, HeapTuple tup) PageSetLSN(BufferGetPage(buffer), recptr); PageSetSUI(BufferGetPage(buffer), ThisStartUpID); } + END_CRIT_CODE; LockBuffer(buffer, BUFFER_LOCK_UNLOCK); WriteBuffer(buffer); @@ -1474,6 +1476,7 @@ l1: } /* XLOG stuff */ + START_CRIT_CODE; { xl_heap_delete xlrec; XLogRecPtr recptr; @@ -1493,6 +1496,7 @@ l1: tp.t_data->t_cmax = GetCurrentCommandId(); tp.t_data->t_infomask &= ~(HEAP_XMAX_COMMITTED | HEAP_XMAX_INVALID | HEAP_MARKED_FOR_UPDATE); + END_CRIT_CODE; #ifdef TUPLE_TOASTER_ACTIVE /* ---------- @@ -1648,10 +1652,9 @@ l2: } /* NO ELOG(ERROR) from here till changes are logged */ + START_CRIT_CODE; - /* insert new tuple */ - RelationPutHeapTuple(relation, newbuf, newtup); - + RelationPutHeapTuple(relation, newbuf, newtup); /* insert new tuple */ if (buffer == newbuf) { TransactionIdStore(GetCurrentTransactionId(), &(oldtup.t_data->t_xmax)); @@ -1681,6 +1684,7 @@ l2: PageSetLSN(BufferGetPage(buffer), recptr); PageSetSUI(BufferGetPage(buffer), ThisStartUpID); } + END_CRIT_CODE; if (newbuf != buffer) { diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c index f00b1e79188..0aa49475247 100644 --- a/src/backend/access/nbtree/nbtinsert.c +++ b/src/backend/access/nbtree/nbtinsert.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.69 2000/11/30 08:46:21 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.70 2000/12/03 10:27:26 vadim Exp $ * *------------------------------------------------------------------------- */ @@ -772,6 +772,7 @@ _bt_split(Relation rel, Buffer buf, OffsetNumber firstright, * NO ELOG(ERROR) till right sibling is updated. * */ + START_CRIT_CODE; { char xlbuf[sizeof(xl_btree_split) + sizeof(CommandId) + sizeof(RelFileNode) + BLCKSZ]; @@ -870,6 +871,7 @@ _bt_split(Relation rel, Buffer buf, OffsetNumber firstright, /* write and release the old right sibling */ _bt_wrtbuf(rel, sbuf); } + END_CRIT_CODE; /* split's done */ return rbuf; @@ -1162,6 +1164,7 @@ _bt_newroot(Relation rel, Buffer lbuf, Buffer rbuf) metabuf = _bt_getbuf(rel, BTREE_METAPAGE,BT_WRITE); /* NO ELOG(ERROR) from here till newroot op is logged */ + START_CRIT_CODE; /* set btree special data */ rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage); @@ -1248,6 +1251,7 @@ _bt_newroot(Relation rel, Buffer lbuf, Buffer rbuf) _bt_wrtbuf(rel, metabuf); } + END_CRIT_CODE; /* write and let go of the new root buffer */ _bt_wrtbuf(rel, rootbuf); diff --git a/src/backend/access/nbtree/nbtpage.c b/src/backend/access/nbtree/nbtpage.c index fe9036d1119..613b141b677 100644 --- a/src/backend/access/nbtree/nbtpage.c +++ b/src/backend/access/nbtree/nbtpage.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtpage.c,v 1.42 2000/11/30 08:46:21 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtpage.c,v 1.43 2000/12/03 10:27:26 vadim Exp $ * * NOTES * Postgres btree pages look like ordinary relation pages. The opaque @@ -165,6 +165,7 @@ _bt_getroot(Relation rel, int access) rootpage = BufferGetPage(rootbuf); /* NO ELOG(ERROR) till meta is updated */ + START_CRIT_CODE; _bt_pageinit(rootpage, BufferGetPageSize(rootbuf)); rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage); @@ -186,6 +187,7 @@ _bt_getroot(Relation rel, int access) PageSetLSN(metapg, recptr); PageSetSUI(metapg, ThisStartUpID); } + END_CRIT_CODE; metad->btm_root = rootblkno; metad->btm_level = 1; @@ -402,6 +404,7 @@ _bt_pagedel(Relation rel, ItemPointer tid) page = BufferGetPage(buf); /* XLOG stuff */ + START_CRIT_CODE; { xl_btree_delete xlrec; XLogRecPtr recptr; @@ -416,6 +419,7 @@ _bt_pagedel(Relation rel, ItemPointer tid) } PageIndexTupleDelete(page, offno); + END_CRIT_CODE; /* write the buffer and release the lock */ _bt_wrtbuf(rel, buf); diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index b9ba82b63bc..129c0e263a5 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.86 2000/11/30 08:46:22 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.87 2000/12/03 10:27:26 vadim Exp $ * * NOTES * Transaction aborts can now occur two ways: @@ -672,6 +672,7 @@ RecordTransactionCommit() BufmgrCommit(); xlrec.xtime = time(NULL); + START_CRIT_CODE; /* * SHOULD SAVE ARRAY OF RELFILENODE-s TO DROP */ @@ -691,6 +692,7 @@ RecordTransactionCommit() TransactionIdCommit(xid); MyProc->logRec.xrecoff = 0; + END_CRIT_CODE; } if (leak) @@ -787,11 +789,13 @@ RecordTransactionAbort(void) XLogRecPtr recptr; xlrec.xtime = time(NULL); + START_CRIT_CODE; recptr = XLogInsert(RM_XACT_ID, XLOG_XACT_ABORT, (char*) &xlrec, SizeOfXactAbort, NULL, 0); TransactionIdAbort(xid); MyProc->logRec.xrecoff = 0; + END_CRIT_CODE; } /* diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 70be51695dd..e1a8ef97d17 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Header: /cvsroot/pgsql/src/backend/access/transam/xlog.c,v 1.38 2000/11/30 08:46:22 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/transam/xlog.c,v 1.39 2000/12/03 10:27:26 vadim Exp $ * *------------------------------------------------------------------------- */ @@ -40,7 +40,7 @@ int XLOGbuffers = 8; XLogRecPtr MyLastRecPtr = {0, 0}; -bool StopIfError = false; +uint32 StopIfError = 0; bool InRecovery = false; StartUpID ThisStartUpID = 0; @@ -270,6 +270,8 @@ XLogInsert(RmgrId rmid, uint8 info, char *hdr, uint32 hdrlen, char *buf, uint32 return (RecPtr); } + START_CRIT_CODE; + /* obtain xlog insert lock */ if (TAS(&(XLogCtl->insert_lck))) /* busy */ { @@ -496,6 +498,7 @@ nbuf: } } + END_CRIT_CODE; return (RecPtr); } @@ -523,6 +526,9 @@ XLogFlush(XLogRecPtr record) return; if (XLByteLE(record, LgwrResult.Flush)) return; + + START_CRIT_CODE; + WriteRqst = LgwrRqst.Write; for (;;) { @@ -533,6 +539,7 @@ XLogFlush(XLogRecPtr record) if (XLByteLE(record, LgwrResult.Flush)) { S_UNLOCK(&(XLogCtl->info_lck)); + END_CRIT_CODE; return; } if (XLByteLT(XLogCtl->LgwrRqst.Flush, record)) @@ -578,6 +585,7 @@ XLogFlush(XLogRecPtr record) if (XLByteLE(record, LgwrResult.Flush)) { S_UNLOCK(&(XLogCtl->lgwr_lck)); + END_CRIT_CODE; return; } if (XLByteLT(LgwrResult.Write, WriteRqst)) @@ -587,6 +595,7 @@ XLogFlush(XLogRecPtr record) S_UNLOCK(&(XLogCtl->lgwr_lck)); if (XLByteLT(LgwrResult.Flush, record)) elog(STOP, "XLogFlush: request is not satisfied"); + END_CRIT_CODE; return; } break; @@ -632,6 +641,8 @@ XLogFlush(XLogRecPtr record) XLogCtl->Write.LgwrResult = LgwrResult; S_UNLOCK(&(XLogCtl->lgwr_lck)); + + END_CRIT_CODE; return; } @@ -1519,9 +1530,9 @@ StartupXLOG() LastRec; XLogRecord *record; char buffer[MAXLOGRECSZ + SizeOfXLogRecord]; - bool sie_saved = false; elog(LOG, "starting up"); + StopIfError++; XLogCtl->xlblocks = (XLogRecPtr *) (((char *) XLogCtl) + sizeof(XLogCtlData)); XLogCtl->pages = ((char *) XLogCtl->xlblocks + sizeof(XLogRecPtr) * XLOGbuffers); @@ -1628,9 +1639,6 @@ StartupXLOG() ControlFile->time = time(NULL); UpdateControlFile(); - sie_saved = StopIfError; - StopIfError = true; - XLogOpenLogRelation(); /* open pg_log */ XLogInitRelationCache(); @@ -1729,7 +1737,6 @@ StartupXLOG() if (InRecovery) { CreateCheckPoint(true); - StopIfError = sie_saved; XLogCloseRelationCache(); } InRecovery = false; @@ -1742,6 +1749,7 @@ StartupXLOG() XLogCtl->ThisStartUpID = ThisStartUpID; elog(LOG, "database system is in production state"); + StopIfError--; return; } @@ -1764,8 +1772,10 @@ ShutdownXLOG() { elog(LOG, "shutting down"); + StopIfError++; CreateDummyCaches(); CreateCheckPoint(true); + StopIfError--; elog(LOG, "database system is shut down"); } @@ -1787,6 +1797,7 @@ CreateCheckPoint(bool shutdown) if (MyLastRecPtr.xrecoff != 0) elog(ERROR, "CreateCheckPoint: cannot be called inside transaction block"); + START_CRIT_CODE; while (TAS(&(XLogCtl->chkp_lck))) { struct timeval delay = {2, 0}; @@ -1917,6 +1928,7 @@ CreateCheckPoint(bool shutdown) S_UNLOCK(&(XLogCtl->chkp_lck)); MyLastRecPtr.xrecoff = 0; /* to avoid commit record */ + END_CRIT_CODE; return; } |