@ -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 2 G usec or ~ 33 minutes , which seems too short .
*/
# ifdef SLEEP_ON_ASSERT
sleep ( 1000000 ) ;
# endif