assert.c
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:2k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * assert.c
  4.  *   Assert code.
  5.  *
  6.  * Copyright (c) 1994, Regents of the University of California
  7.  *
  8.  *
  9.  * IDENTIFICATION
  10.  *   $Header: /usr/local/cvsroot/pgsql/src/backend/utils/error/assert.c,v 1.13.2.1 1999/08/02 05:25:04 scrappy Exp $
  11.  *
  12.  * NOTE
  13.  *   This should eventually work with elog(), dlog(), etc.
  14.  *
  15.  *-------------------------------------------------------------------------
  16.  */
  17. #include <unistd.h>
  18. #include "postgres.h"
  19. #include "utils/exc.h"
  20. #include "utils/trace.h"
  21. int
  22. ExceptionalCondition(char *conditionName,
  23.  Exception *exceptionP,
  24.  char *detail,
  25.  char *fileName,
  26.  int lineNumber)
  27. {
  28. extern char *ExcFileName; /* XXX */
  29. extern Index ExcLineNumber; /* XXX */
  30. ExcFileName = fileName;
  31. ExcLineNumber = lineNumber;
  32. if (!PointerIsValid(conditionName)
  33. || !PointerIsValid(fileName)
  34. || !PointerIsValid(exceptionP))
  35. {
  36. EPRINTF("TRAP: ExceptionalCondition: bad argumentsn");
  37. ExcAbort(exceptionP,
  38.  (ExcDetail) detail,
  39.  (ExcData) NULL,
  40.  (ExcMessage) NULL);
  41. }
  42. else
  43. {
  44. EPRINTF("TRAP: %s("%s:%s", File: "%s", Line: %d)n",
  45. exceptionP->message, conditionName,
  46. (detail == NULL ? "" : detail),
  47. fileName, lineNumber);
  48. }
  49. #ifdef ABORT_ON_ASSERT
  50. abort();
  51. #endif
  52. #ifdef SLEEP_ON_ASSERT
  53. sleep(1000000);
  54. #endif
  55. /*
  56.  * XXX Depending on the Exception and tracing conditions, you will XXX
  57.  * want to stop here immediately and maybe dump core. XXX This may be
  58.  * especially true for Assert(), etc.
  59.  */
  60. /* TraceDump(); dump the trace stack */
  61. /* XXX FIXME: detail is lost */
  62. ExcRaise(exceptionP, (ExcDetail) 0, (ExcData) NULL, conditionName);
  63. return 0;
  64. }