mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Include the process PID in assertion-failure messages.
This should help to identify what happened when studying the postmaster log after-the-fact. While here, clean up some old comments in the same function. Discussion: https://postgr.es/m/1568983.1601845687@sss.pgh.pa.us
This commit is contained in:
		@@ -1,7 +1,7 @@
 | 
			
		||||
/*-------------------------------------------------------------------------
 | 
			
		||||
 *
 | 
			
		||||
 * assert.c
 | 
			
		||||
 *	  Assert code.
 | 
			
		||||
 *	  Assert support code.
 | 
			
		||||
 *
 | 
			
		||||
 * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
 | 
			
		||||
 * Portions Copyright (c) 1994, Regents of the University of California
 | 
			
		||||
@@ -10,9 +10,6 @@
 | 
			
		||||
 * IDENTIFICATION
 | 
			
		||||
 *	  src/backend/utils/error/assert.c
 | 
			
		||||
 *
 | 
			
		||||
 * NOTE
 | 
			
		||||
 *	  This should eventually work with elog()
 | 
			
		||||
 *
 | 
			
		||||
 *-------------------------------------------------------------------------
 | 
			
		||||
 */
 | 
			
		||||
#include "postgres.h"
 | 
			
		||||
@@ -24,6 +21,10 @@
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * ExceptionalCondition - Handles the failure of an Assert()
 | 
			
		||||
 *
 | 
			
		||||
 * We intentionally do not go through elog() here, on the grounds of
 | 
			
		||||
 * wanting to minimize the amount of infrastructure that has to be
 | 
			
		||||
 * working to report an assertion failure.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
ExceptionalCondition(const char *conditionName,
 | 
			
		||||
@@ -31,20 +32,21 @@ ExceptionalCondition(const char *conditionName,
 | 
			
		||||
					 const char *fileName,
 | 
			
		||||
					 int lineNumber)
 | 
			
		||||
{
 | 
			
		||||
	/* Report the failure on stderr (or local equivalent) */
 | 
			
		||||
	if (!PointerIsValid(conditionName)
 | 
			
		||||
		|| !PointerIsValid(fileName)
 | 
			
		||||
		|| !PointerIsValid(errorType))
 | 
			
		||||
		write_stderr("TRAP: ExceptionalCondition: bad arguments\n");
 | 
			
		||||
		write_stderr("TRAP: ExceptionalCondition: bad arguments in PID %d\n",
 | 
			
		||||
					 (int) getpid());
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		write_stderr("TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n",
 | 
			
		||||
		write_stderr("TRAP: %s(\"%s\", File: \"%s\", Line: %d, PID: %d)\n",
 | 
			
		||||
					 errorType, conditionName,
 | 
			
		||||
					 fileName, lineNumber);
 | 
			
		||||
	}
 | 
			
		||||
					 fileName, lineNumber, (int) getpid());
 | 
			
		||||
 | 
			
		||||
	/* Usually this shouldn't be needed, but make sure the msg went out */
 | 
			
		||||
	fflush(stderr);
 | 
			
		||||
 | 
			
		||||
	/* If we have support for it, dump a simple backtrace */
 | 
			
		||||
#ifdef HAVE_BACKTRACE_SYMBOLS
 | 
			
		||||
	{
 | 
			
		||||
		void	   *buf[100];
 | 
			
		||||
@@ -55,12 +57,12 @@ ExceptionalCondition(const char *conditionName,
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef SLEEP_ON_ASSERT
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * It would be nice to use pg_usleep() here, but only does 2000 sec or 33
 | 
			
		||||
	 * minutes, which seems too short.
 | 
			
		||||
	 * If configured to do so, sleep indefinitely to allow user to attach a
 | 
			
		||||
	 * debugger.  It would be nice to use pg_usleep() here, but that can sleep
 | 
			
		||||
	 * at most 2G usec or ~33 minutes, which seems too short.
 | 
			
		||||
	 */
 | 
			
		||||
#ifdef SLEEP_ON_ASSERT
 | 
			
		||||
	sleep(1000000);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user