Simon Riggs <[EMAIL PROTECTED]> writes: > AFAICS this is the only case of unconditionally acquiring all 3 locks.
You just lost me ... I think the above is certainly a bad idea from a concurrency standpoint, and very possibly a deadlock risk. In any case you are thinking about it the wrong way. It is not LogwrtResult you want to advance, it is the Insert variables that define what the current WAL buffer page is. ISTM the correct approach involves having a special case in XLogInsert: just after inserting an end-of-file record, forcibly advance to the next buffer, and set it up to be the first page for the next segment rather than the next segment in sequence. (This is likely best handled as an extra call to AdvanceXLInsertBuffer that invokes some special-case code in AdvanceXLInsertBuffer.) You normally only need the WALInsertLock to do this. After that's complete you can release the insert lock, and then other operations can proceed while you do an XLogFlush to force out the remaining dirty WAL buffers for the old segment. Then you're done. (I think I'd put the XLogFlush in the pg_stop_backup code, not in XLogInsert proper.) regards, tom lane ---------------------------(end of broadcast)--------------------------- TIP 2: you can get off all lists at once with the unregister command (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])