Tom Lane wrote:
Heikki Linnakangas <[EMAIL PROTECTED]> writes:
... MarkBufferDirty needs to be called before XLogInsert to avoid a race condition in checkpoint, see comments in SyncOneBuffer in bufmgr.c for an explanation.

Right, see also the "Write-Ahead Log coding" section in
src/backend/access/transam/README (which is maybe not a very good place
for it, but it doesn't seem like bufmgr's turf either).

Yeah it could be documented more visibly, I didn't know about (or didn't remember) that rule until I saw that comment today. I found that issue in GIN by just quickly grepping for callers of MarkBufferDirty.

How about adding an Assert to XLogInsert to check that all buffers given to it are already marked as dirty? It wouldn't be completely water-tight, sometimes we don't pass the buffer to XLogInsert even though we stamp the LSN, but it would catch most cases.


--
  Heikki Linnakangas
  EnterpriseDB   http://www.enterprisedb.com

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
      choose an index scan if your joining column's datatypes do not
      match

Reply via email to