mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Fix memory leak in SnapBuildSerialize.
The memory for the snapshot was leaked while serializing it to disk during logical decoding. This memory will be freed only once walsender stops streaming the changes. This can lead to a huge memory increase when master logs Standby Snapshot too frequently say when the user is trying to create many replication slots. Reported-by: funnyxj.fxj@alibaba-inc.com Diagnosed-by: funnyxj.fxj@alibaba-inc.com Author: Amit Kapila Backpatch-through: 9.5 Discussion: https://postgr.es/m/033ab54c-6393-42ee-8ec9-2b399b5d8cde.funnyxj.fxj@alibaba-inc.com
This commit is contained in:
		@@ -1464,7 +1464,7 @@ static void
 | 
				
			|||||||
SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn)
 | 
					SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	Size		needed_length;
 | 
						Size		needed_length;
 | 
				
			||||||
	SnapBuildOnDisk *ondisk;
 | 
						SnapBuildOnDisk *ondisk = NULL;
 | 
				
			||||||
	char	   *ondisk_c;
 | 
						char	   *ondisk_c;
 | 
				
			||||||
	int			fd;
 | 
						int			fd;
 | 
				
			||||||
	char		tmppath[MAXPGPATH];
 | 
						char		tmppath[MAXPGPATH];
 | 
				
			||||||
@@ -1656,6 +1656,9 @@ SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn)
 | 
				
			|||||||
out:
 | 
					out:
 | 
				
			||||||
	ReorderBufferSetRestartPoint(builder->reorder,
 | 
						ReorderBufferSetRestartPoint(builder->reorder,
 | 
				
			||||||
								 builder->last_serialized_snapshot);
 | 
													 builder->last_serialized_snapshot);
 | 
				
			||||||
 | 
						/* be tidy */
 | 
				
			||||||
 | 
						if (ondisk)
 | 
				
			||||||
 | 
							pfree(ondisk);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user