aboutsummaryrefslogtreecommitdiff
path: root/src/backend/storage/buffer/bufmgr.c
diff options
context:
space:
mode:
authorMarc G. Fournier <scrappy@hub.org>1996-07-23 05:44:10 +0000
committerMarc G. Fournier <scrappy@hub.org>1996-07-23 05:44:10 +0000
commitb619cb09d96562d701fcc9f7f612b9bbd903ec6f (patch)
tree94a57a24afe272e83c2fc2a9597a6efad75d6440 /src/backend/storage/buffer/bufmgr.c
parent00fe588fb0ad2f78b3020234e16369e58ee119a8 (diff)
downloadpostgresql-b619cb09d96562d701fcc9f7f612b9bbd903ec6f.tar.gz
postgresql-b619cb09d96562d701fcc9f7f612b9bbd903ec6f.zip
iBrought in a fix for backend crashes
Submitted by: "Vadim B. Mikheev" <vadim@sable.krasnoyarsk.su>
Diffstat (limited to 'src/backend/storage/buffer/bufmgr.c')
-rw-r--r--src/backend/storage/buffer/bufmgr.c31
1 files changed, 17 insertions, 14 deletions
diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c
index 655f1f408e0..86246135cc5 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.1.1.1 1996/07/09 06:21:54 scrappy Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.2 1996/07/23 05:44:10 scrappy Exp $
*
*-------------------------------------------------------------------------
*/
@@ -485,20 +485,23 @@ BufferAlloc(Relation reln,
}
}
+ if ( buf != NULL )
+ {
#ifdef HAS_TEST_AND_SET
- S_UNLOCK(&(buf->io_in_progress_lock));
+ S_UNLOCK(&(buf->io_in_progress_lock));
#else /* !HAS_TEST_AND_SET */
- if (buf->refcount > 1)
- SignalIO(buf);
+ if (buf->refcount > 1)
+ SignalIO(buf);
#endif /* !HAS_TEST_AND_SET */
/* give up the buffer since we don't need it any more */
- buf->refcount--;
- PrivateRefCount[BufferDescriptorGetBuffer(buf) - 1] = 0;
- AddBufferToFreelist(buf);
- buf->flags |= BM_FREE;
- buf->flags &= ~BM_DIRTY;
- buf->flags &= ~BM_IO_IN_PROGRESS;
+ buf->refcount--;
+ PrivateRefCount[BufferDescriptorGetBuffer(buf) - 1] = 0;
+ AddBufferToFreelist(buf);
+ buf->flags |= BM_FREE;
+ buf->flags &= ~BM_DIRTY;
+ buf->flags &= ~BM_IO_IN_PROGRESS;
+ }
SpinRelease(BufMgrLock);
@@ -537,8 +540,8 @@ BufferAlloc(Relation reln,
}
/* record the database name and relation name for this buffer */
- buf->sb_relname = pstrdup(reln->rd_rel->relname.data);
- buf->sb_dbname = pstrdup(GetDatabaseName());
+ strcpy (buf->sb_relname, reln->rd_rel->relname.data);
+ strcpy (buf->sb_dbname, GetDatabaseName());
/* remember which storage manager is responsible for it */
buf->bufsmgr = reln->rd_rel->relsmgr;
@@ -1248,7 +1251,7 @@ PrintBufferDescs()
elog(NOTICE, "[%02d] (freeNext=%d, freePrev=%d, relname=%.*s, \
blockNum=%d, flags=0x%x, refcount=%d %d)",
i, buf->freeNext, buf->freePrev, NAMEDATALEN,
- &(buf->sb_relname), buf->tag.blockNum, buf->flags,
+ buf->sb_relname, buf->tag.blockNum, buf->flags,
buf->refcount, PrivateRefCount[i]);
}
SpinRelease(BufMgrLock);
@@ -1273,7 +1276,7 @@ PrintPinnedBufs()
if (PrivateRefCount[i] > 0)
elog(NOTICE, "[%02d] (freeNext=%d, freePrev=%d, relname=%.*s, \
blockNum=%d, flags=0x%x, refcount=%d %d)\n",
- i, buf->freeNext, buf->freePrev, NAMEDATALEN, &(buf->sb_relname),
+ i, buf->freeNext, buf->freePrev, NAMEDATALEN, buf->sb_relname,
buf->tag.blockNum, buf->flags,
buf->refcount, PrivateRefCount[i]);
}