mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Fix bufmgr so CHECKPOINT_END_OF_RECOVERY behaves as a shutdown checkpoint.
Recovery code documents clearly that a shutdown checkpoint is executed at end of recovery - a shutdown checkpoint WAL record is written but the buffer manager had been altered to treat end of recovery as a normal checkpoint. This bug exacerbates the bufmgr relpersistence bug. Bug spotted by Andres Freund, patch by me.
This commit is contained in:
		@@ -1183,9 +1183,9 @@ BufferSync(int flags)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * Unless this is a shutdown checkpoint, we write only permanent, dirty
 | 
						 * Unless this is a shutdown checkpoint, we write only permanent, dirty
 | 
				
			||||||
	 * buffers.  But at shutdown time, we write all dirty buffers.
 | 
						 * buffers.  But at shutdown or end of recovery, we write all dirty buffers.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	if (!(flags & CHECKPOINT_IS_SHUTDOWN))
 | 
						if (!((flags & CHECKPOINT_IS_SHUTDOWN) || (flags & CHECKPOINT_END_OF_RECOVERY)))
 | 
				
			||||||
		mask |= BM_PERMANENT;
 | 
							mask |= BM_PERMANENT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user