summaryrefslogtreecommitdiff
path: root/src/backend/storage/buffer
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/storage/buffer')
-rw-r--r--src/backend/storage/buffer/buf_init.c5
-rw-r--r--src/backend/storage/buffer/bufmgr.c16
2 files changed, 19 insertions, 2 deletions
diff --git a/src/backend/storage/buffer/buf_init.c b/src/backend/storage/buffer/buf_init.c
index 7613971df7..dcfebd0d43 100644
--- a/src/backend/storage/buffer/buf_init.c
+++ b/src/backend/storage/buffer/buf_init.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/storage/buffer/buf_init.c,v 1.7 1997/01/26 00:45:25 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/buffer/buf_init.c,v 1.8 1997/03/28 07:04:52 scrappy Exp $
*
*-------------------------------------------------------------------------
*/
@@ -64,6 +64,8 @@ extern IpcSemaphoreId WaitIOSemId;
long *PrivateRefCount; /* also used in freelist.c */
long *LastRefCount; /* refcounts of last ExecMain level */
+long *CommitInfoNeedsSave; /* to write buffers where we have filled in */
+ /* t_tmin (or t_tmax) */
/*
* Data Structures:
@@ -236,6 +238,7 @@ InitBufferPool(IPCKey key)
#endif
PrivateRefCount = (long *) calloc(NBuffers, sizeof(long));
LastRefCount = (long *) calloc(NBuffers, sizeof(long));
+ CommitInfoNeedsSave = (long *) calloc(NBuffers, sizeof(long));
}
/* -----------------------------------------------------
diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c
index b40b0b0e04..5331ab3fbe 100644
--- a/src/backend/storage/buffer/bufmgr.c
+++ b/src/backend/storage/buffer/bufmgr.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.10 1997/01/23 19:43:23 scrappy Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.11 1997/03/28 07:05:03 scrappy Exp $
*
*-------------------------------------------------------------------------
*/
@@ -848,6 +848,10 @@ ReleaseAndReadBuffer(Buffer buffer,
AddBufferToFreelist(bufHdr);
bufHdr->flags |= BM_FREE;
}
+ if(CommitInfoNeedsSave[buffer - 1]) {
+ bufHdr->flags |= (BM_DIRTY | BM_JUST_DIRTIED);
+ CommitInfoNeedsSave[buffer - 1] = 0;
+ }
retbuf = ReadBufferWithBufferLock(relation, blockNum, true);
return retbuf;
}
@@ -1083,6 +1087,7 @@ ResetBufferPool()
{
register int i;
for (i=1; i<=NBuffers; i++) {
+ CommitInfoNeedsSave[i - 1] = 0;
if (BufferIsValid(i)) {
while(PrivateRefCount[i - 1] > 0) {
ReleaseBuffer(i);
@@ -1498,6 +1503,10 @@ ReleaseBuffer(Buffer buffer)
AddBufferToFreelist(bufHdr);
bufHdr->flags |= BM_FREE;
}
+ if(CommitInfoNeedsSave[buffer - 1]) {
+ bufHdr->flags |= (BM_DIRTY | BM_JUST_DIRTIED);
+ CommitInfoNeedsSave[buffer - 1] = 0;
+ }
SpinRelease(BufMgrLock);
}
@@ -1734,3 +1743,8 @@ int SetBufferWriteMode (int mode)
WriteMode = mode;
return (old);
}
+
+void SetBufferCommitInfoNeedsSave(Buffer buffer)
+{
+ CommitInfoNeedsSave[buffer - 1]++;
+}