aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/access')
-rw-r--r--src/backend/access/heap/heapam.c12
-rw-r--r--src/backend/access/nbtree/nbtinsert.c6
-rw-r--r--src/backend/access/nbtree/nbtpage.c6
-rw-r--r--src/backend/access/transam/xact.c6
-rw-r--r--src/backend/access/transam/xlog.c26
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;
}