mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +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.c
|
||||||
* Assert code.
|
* Assert support code.
|
||||||
*
|
*
|
||||||
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
@ -10,9 +10,6 @@
|
|||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* src/backend/utils/error/assert.c
|
* src/backend/utils/error/assert.c
|
||||||
*
|
*
|
||||||
* NOTE
|
|
||||||
* This should eventually work with elog()
|
|
||||||
*
|
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
#include "postgres.h"
|
#include "postgres.h"
|
||||||
@ -24,6 +21,10 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* ExceptionalCondition - Handles the failure of an Assert()
|
* 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
|
void
|
||||||
ExceptionalCondition(const char *conditionName,
|
ExceptionalCondition(const char *conditionName,
|
||||||
@ -31,20 +32,21 @@ ExceptionalCondition(const char *conditionName,
|
|||||||
const char *fileName,
|
const char *fileName,
|
||||||
int lineNumber)
|
int lineNumber)
|
||||||
{
|
{
|
||||||
|
/* Report the failure on stderr (or local equivalent) */
|
||||||
if (!PointerIsValid(conditionName)
|
if (!PointerIsValid(conditionName)
|
||||||
|| !PointerIsValid(fileName)
|
|| !PointerIsValid(fileName)
|
||||||
|| !PointerIsValid(errorType))
|
|| !PointerIsValid(errorType))
|
||||||
write_stderr("TRAP: ExceptionalCondition: bad arguments\n");
|
write_stderr("TRAP: ExceptionalCondition: bad arguments in PID %d\n",
|
||||||
|
(int) getpid());
|
||||||
else
|
else
|
||||||
{
|
write_stderr("TRAP: %s(\"%s\", File: \"%s\", Line: %d, PID: %d)\n",
|
||||||
write_stderr("TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n",
|
|
||||||
errorType, conditionName,
|
errorType, conditionName,
|
||||||
fileName, lineNumber);
|
fileName, lineNumber, (int) getpid());
|
||||||
}
|
|
||||||
|
|
||||||
/* Usually this shouldn't be needed, but make sure the msg went out */
|
/* Usually this shouldn't be needed, but make sure the msg went out */
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
|
|
||||||
|
/* If we have support for it, dump a simple backtrace */
|
||||||
#ifdef HAVE_BACKTRACE_SYMBOLS
|
#ifdef HAVE_BACKTRACE_SYMBOLS
|
||||||
{
|
{
|
||||||
void *buf[100];
|
void *buf[100];
|
||||||
@ -55,12 +57,12 @@ ExceptionalCondition(const char *conditionName,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef SLEEP_ON_ASSERT
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* It would be nice to use pg_usleep() here, but only does 2000 sec or 33
|
* If configured to do so, sleep indefinitely to allow user to attach a
|
||||||
* minutes, which seems too short.
|
* 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);
|
sleep(1000000);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user