Hi Tom,
On Wed, 16 Jun 2004, Tom Lane wrote:
> I'm starting to review this patch, and almost immediately came across
> what seemed a spectacularly bad idea:
>
> *** src/backend/storage/buffer/bufmgr.c 8 May 2004 19:09:25 -0000 1.165
> --- src/backend/storage/buffer/bufmgr.c 26 May 2004 06:21:01 -0000
> ***************
> *** 1148,1152 ****
> {
> bufHdr = &LocalBufferDescriptors[i];
> ! if (RelFileNodeEquals(bufHdr->tag.rnode, rnode))
> {
> bufHdr->flags &= ~(BM_DIRTY | BM_JUST_DIRTIED);
> --- 1148,1156 ----
> {
> bufHdr = &LocalBufferDescriptors[i];
> ! /* special case for default tblNode */
> ! if (RelFileNodeEquals(bufHdr->tag.rnode, rnode) ||
> ! (!OidIsValid(rnode.tblNode) &&
> ! bufHdr->tag.rnode.relNode == rnode.relNode &&
> ! bufHdr->tag.rnode.dbNode == rnode.dbNode))
> {
> bufHdr->flags &= ~(BM_DIRTY | BM_JUST_DIRTIED);
>
> There has got to be a better way than this. In the first place the
> code seems able to seize on the wrong buffer if it's not checking
> all three fields; in the second place, if the weak matching is correct
> here why is it not needed everyplace else?
>
Ahh. This is a hang over from some tests I was doing. I must have missed
it when I send the patch in. The patch should certainly work without this
change. I will verify later today when I have access to my development
machine.
Gavin