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
*/
29
void
30
ExceptionalCondition
(
const
char
*
conditionName
,
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 */
43
fflush
(
stderr
);
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
));
52
backtrace_symbols_fd
(
buf
,
nframes
, fileno(
stderr
));
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
}
ExceptionalCondition
void ExceptionalCondition(const char *conditionName, const char *fileName, int lineNumber)
Definition
assert.c:30
write_stderr
#define write_stderr(str)
Definition
parallel.c:186
lengthof
#define lengthof(array)
Definition
c.h:803
buf
static char buf[DEFAULT_XLOG_SEG_SIZE]
Definition
pg_test_fsync.c:71
postgres.h
fb
static int fb(int x)
Definition
preproc-init.c:92
unistd.h
src
backend
utils
error
assert.c
Generated on Fri Jan 30 2026 18:13:15 for PostgreSQL Source Code by
1.9.8