mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Don't clobber postmaster sigmask in dsm_impl_resize.
Commit4518c798intended to block signals in regular backends that allocate DSM segments, but dsm_impl_resize() is also reached by dsm_postmaster_startup(). It's not OK to clobber the postmaster's signal mask, so only manipulate the signal mask when under the postmaster. Back-patch to all releases, like4518c798. Discussion: https://postgr.es/m/CA%2BhUKGKNpK%3D2OMeea_AZwpLg7Bm4%3DgYWk7eDjZ5F6YbozfOf8w%40mail.gmail.com
This commit is contained in:
		@@ -352,7 +352,8 @@ dsm_impl_posix_resize(int fd, off_t size)
 | 
			
		||||
	 * allowed SIGUSR1 to interrupt us repeatedly (for example, due to recovery
 | 
			
		||||
	 * conflicts), the retry loop might never succeed.
 | 
			
		||||
	 */
 | 
			
		||||
	PG_SETMASK(&BlockSig);
 | 
			
		||||
	if (IsUnderPostmaster)
 | 
			
		||||
		PG_SETMASK(&BlockSig);
 | 
			
		||||
 | 
			
		||||
	/* Truncate (or extend) the file to the requested size. */
 | 
			
		||||
	do
 | 
			
		||||
@@ -390,9 +391,12 @@ dsm_impl_posix_resize(int fd, off_t size)
 | 
			
		||||
	}
 | 
			
		||||
#endif							/* HAVE_POSIX_FALLOCATE && __linux__ */
 | 
			
		||||
 | 
			
		||||
	save_errno = errno;
 | 
			
		||||
	PG_SETMASK(&UnBlockSig);
 | 
			
		||||
	errno = save_errno;
 | 
			
		||||
	if (IsUnderPostmaster)
 | 
			
		||||
	{
 | 
			
		||||
		save_errno = errno;
 | 
			
		||||
		PG_SETMASK(&UnBlockSig);
 | 
			
		||||
		errno = save_errno;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return rc;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user