postgresql/src/backend/utils/error/assert.c

61 lines
1.4 KiB
C
Raw Normal View History

/*-------------------------------------------------------------------------
*
* assert.c
* Assert code.
*
2009-01-01 12:24:05 -05:00
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
*
* IDENTIFICATION
2009-01-01 12:24:05 -05:00
* $PostgreSQL: pgsql/src/backend/utils/error/assert.c,v 1.36 2009/01/01 17:23:51 momjian Exp $
*
* NOTE
* This should eventually work with elog()
*
*-------------------------------------------------------------------------
*/
1999-07-15 23:14:30 -04:00
#include "postgres.h"
#include <unistd.h>
/*
* ExceptionalCondition - Handles the failure of an Assert()
*
* Note: this can't actually return, but we declare it as returning int
* because the TrapMacro() macro might get wonky otherwise.
*/
int
ExceptionalCondition(const char *conditionName,
const char *errorType,
const char *fileName,
int lineNumber)
{
if (!PointerIsValid(conditionName)
|| !PointerIsValid(fileName)
|| !PointerIsValid(errorType))
write_stderr("TRAP: ExceptionalCondition: bad arguments\n");
else
{
write_stderr("TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n",
2004-08-29 01:07:03 -04:00
errorType, conditionName,
fileName, lineNumber);
}
/* Usually this shouldn't be needed, but make sure the msg went out */
fflush(stderr);
1998-06-18 12:35:38 -04:00
#ifdef SLEEP_ON_ASSERT
2004-08-29 01:07:03 -04:00
/*
2005-10-14 22:49:52 -04:00
* It would be nice to use pg_usleep() here, but only does 2000 sec or 33
* minutes, which seems too short.
2004-08-29 01:07:03 -04:00
*/
sleep(1000000);
1998-06-18 12:35:38 -04:00
#endif
abort();
1998-08-31 23:29:17 -04:00
return 0;
}