--- ntop-current-starting/ntop.c	Tue Feb 19 21:56:43 2002
+++ ntop-current/ntop.c	Thu Feb 21 03:20:05 2002
@@ -816,4 +816,36 @@
   int i;
 
+  if (signo != 0) {
+        void *array[20];
+        size_t size;
+        char **strings;
+        size_t i;
+
+        /* Don't double fault... */
+        setsignal(SIGSEGV, SIG_DFL);
+
+        if (myGlobals.debugMode == 1) {
+            /* Grab the backtrace before we do much else... but only print it if we are in debug mode */
+            size = backtrace(array, 20);
+            strings = (char*)backtrace_symbols (array, size);
+        }
+
+        traceEvent(TRACE_ERROR, "\n\n\n*****ntop error: Signal(%d)\n", signo);
+        printf("\n\n\n*****ntop error: Signal(%d)\n", signo);
+
+        if (myGlobals.debugMode == 1) {
+            traceEvent(TRACE_ERROR, "\n     backtrace is:\n");
+            printf("\n     backtrace is:\n");
+            /* Ignore the 0th entry, that's our cleanup() */
+            for (i=1; i<size; i++) {
+                traceEvent(TRACE_ERROR, "          %2d. %s\n", i, strings[i]);
+                printf("          %2d. %s\n", i, strings[i]);
+            }
+
+            traceEvent(TRACE_ERROR, "\n\n\n*****ntop error: Signal(%d)\n\n\n\n", signo);
+            printf("\n\n\n*****ntop error: Signal(%d)\n\n\n\n", signo);
+        }
+  }
+
   if(unloaded)
     return;
--- ntop-current-starting/initialize.c	Mon Feb 18 17:05:16 2002
+++ ntop-current/initialize.c	Wed Feb 20 16:02:50 2002
@@ -1183,4 +1183,5 @@
   setsignal(SIGPIPE, ignoreThisSignal);
   setsignal(SIGABRT, ignoreThisSignal);
+  setsignal(SIGSEGV, cleanup);
 #endif
 }
