PostgreSQL Source Code git master
Loading...
Searching...
No Matches
assert.c
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * assert.c
4 * Assert support code.
5 *
6 * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
7 * Portions Copyright (c) 1994, Regents of the University of California
8 *
9 *
10 * IDENTIFICATION
11 * src/backend/utils/error/assert.c
12 *
13 *-------------------------------------------------------------------------
14 */
15#include "postgres.h"
16
17#include <unistd.h>
18#ifdef HAVE_EXECINFO_H
19#include <execinfo.h>
20#endif
21
22/*
23 * ExceptionalCondition - Handles the failure of an Assert()
24 *
25 * We intentionally do not go through elog() here, on the grounds of
26 * wanting to minimize the amount of infrastructure that has to be
27 * working to report an assertion failure.
28 */
29void
31 const char *fileName,
32 int lineNumber)
33{
34 /* Report the failure on stderr (or local equivalent) */
35 if (!conditionName || !fileName)
36 write_stderr("TRAP: ExceptionalCondition: bad arguments in PID %d\n",
37 (int) getpid());
38 else
39 write_stderr("TRAP: failed Assert(\"%s\"), File: \"%s\", Line: %d, PID: %d\n",
40 conditionName, fileName, lineNumber, (int) getpid());
41
42 /* Usually this shouldn't be needed, but make sure the msg went out */
44
45 /* If we have support for it, dump a simple backtrace */
46#ifdef HAVE_BACKTRACE_SYMBOLS
47 {
48 void *buf[100];
49 int nframes;
50
51 nframes = backtrace(buf, lengthof(buf));
53 }
54#endif
55
56 /*
57 * If configured to do so, sleep indefinitely to allow user to attach a
58 * debugger. It would be nice to use pg_usleep() here, but that can sleep
59 * at most 2G usec or ~33 minutes, which seems too short.
60 */
61#ifdef SLEEP_ON_ASSERT
62 sleep(1000000);
63#endif
64
65 abort();
66}
void ExceptionalCondition(const char *conditionName, const char *fileName, int lineNumber)
Definition assert.c:30
#define write_stderr(str)
Definition parallel.c:186
#define lengthof(array)
Definition c.h:803
static char buf[DEFAULT_XLOG_SEG_SIZE]
static int fb(int x)