summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>1998-08-11 13:55:16 +0000
committerAndrew Tridgell <tridge@samba.org>1998-08-11 13:55:16 +0000
commite107f730824ce9ab9915dab4745e5eba1845bbe4 (patch)
tree149d4560e27d1da7d7c5bd42073db89f1f4e4848
parent9042aa41c3c54e8dce600338cd4b796b65aaf066 (diff)
downloadsamba-e107f730824ce9ab9915dab4745e5eba1845bbe4.tar.gz
samba-e107f730824ce9ab9915dab4745e5eba1845bbe4.tar.bz2
samba-e107f730824ce9ab9915dab4745e5eba1845bbe4.zip
make sure that a fault cannot occur twice. The new Debug1() code is
causing seg faults on my machine and because the fault code calls DEBUG() it is looping! now to find the bug in the Debug1() code ... (This used to be commit 83122bae2253221f085118c6e7e914982656bd64)
-rw-r--r--source3/lib/fault.c40
1 files changed, 22 insertions, 18 deletions
diff --git a/source3/lib/fault.c b/source3/lib/fault.c
index e1b3c6cd9f..9b665f65c7 100644
--- a/source3/lib/fault.c
+++ b/source3/lib/fault.c
@@ -31,28 +31,32 @@ report a fault
********************************************************************/
static void fault_report(int sig)
{
- DEBUG(0,("===============================================================\n"));
- DEBUG(0,("INTERNAL ERROR: Signal %d in pid %d (%s)",sig,(int)getpid(),VERSION));
- DEBUG(0,("\nPlease read the file BUGS.txt in the distribution\n"));
- DEBUG(0,("===============================================================\n"));
+ static int counter;
+
+ if (counter) _exit(1);
+
+ counter++;
+
+ DEBUG(0,("===============================================================\n"));
+ DEBUG(0,("INTERNAL ERROR: Signal %d in pid %d (%s)",sig,(int)getpid(),VERSION));
+ DEBUG(0,("\nPlease read the file BUGS.txt in the distribution\n"));
+ DEBUG(0,("===============================================================\n"));
#if AJT
- ajt_panic();
+ ajt_panic();
#endif
- if (cont_fn)
- {
- fault_setup(cont_fn);
- cont_fn(NULL);
+ if (cont_fn) {
+ cont_fn(NULL);
#ifdef SIGSEGV
- CatchSignal(SIGSEGV,SIGNAL_CAST SIG_DFL);
+ CatchSignal(SIGSEGV,SIGNAL_CAST SIG_DFL);
#endif
#ifdef SIGBUS
- CatchSignal(SIGBUS,SIGNAL_CAST SIG_DFL);
+ CatchSignal(SIGBUS,SIGNAL_CAST SIG_DFL);
#endif
- return; /* this should cause a core dump */
- }
- exit(1);
+ return; /* this should cause a core dump */
+ }
+ exit(1);
}
/****************************************************************************
@@ -60,7 +64,7 @@ catch serious errors
****************************************************************************/
static void sig_fault(int sig)
{
- fault_report(sig);
+ fault_report(sig);
}
/*******************************************************************
@@ -68,13 +72,13 @@ setup our fault handlers
********************************************************************/
void fault_setup(void (*fn)(void *))
{
- cont_fn = fn;
+ cont_fn = fn;
#ifdef SIGSEGV
- CatchSignal(SIGSEGV,SIGNAL_CAST sig_fault);
+ CatchSignal(SIGSEGV,SIGNAL_CAST sig_fault);
#endif
#ifdef SIGBUS
- CatchSignal(SIGBUS,SIGNAL_CAST sig_fault);
+ CatchSignal(SIGBUS,SIGNAL_CAST sig_fault);
#endif
}