diff options
Diffstat (limited to 'src/backend/storage')
| -rw-r--r-- | src/backend/storage/buffer/buf_init.c | 5 | ||||
| -rw-r--r-- | src/backend/storage/buffer/bufmgr.c | 16 |
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]++; +} |
