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? What's the purpose of this? regards, tom lane ---------------------------(end of broadcast)--------------------------- TIP 4: Don't 'kill -9' the postmaster