made backtrace() calls optional to support uClibc
authorMartin Willi <martin@strongswan.org>
Wed, 6 Dec 2006 13:59:13 +0000 (13:59 -0000)
committerMartin Willi <martin@strongswan.org>
Wed, 6 Dec 2006 13:59:13 +0000 (13:59 -0000)
configure.in
src/charon/daemon.c
src/libstrongswan/utils/leak_detective.c

index ea667b8..174d401 100644 (file)
@@ -96,6 +96,8 @@ dnl ==========================
 dnl  check required libraries
 dnl ==========================
 
+AC_CHECK_FUNCS(backtrace getifaddrs)
+
 AC_HAVE_LIBRARY([gmp],[LIBS="$LIBS"],[AC_MSG_ERROR([GNU Multi Precision library gmp not found])])      
 if test "$ldap" = "true"; then
     AC_HAVE_LIBRARY([ldap],[LIBS="$LIBS"],[AC_MSG_ERROR([LDAP enabled, but library ldap not found])])
index 1fd9f9a..f9e913c 100644 (file)
@@ -285,6 +285,7 @@ static void initialize(private_daemon_t *this, bool strict, bool syslog,
  */
 void signal_handler(int signal)
 {
+#ifndef HAVE_BACKTRACE
        void *array[20];
        size_t size;
        char **strings;
@@ -294,13 +295,17 @@ void signal_handler(int signal)
        strings = backtrace_symbols(array, size);
 
        DBG1(DBG_DMN, "thread %u received %s. Dumping %d frames from stack:",
-                signal == SIGSEGV ? "SIGSEGV" : "SIGILL", pthread_self(), size);
+                pthread_self(), signal == SIGSEGV ? "SIGSEGV" : "SIGILL", size);
 
        for (i = 0; i < size; i++)
        {
                DBG1(DBG_DMN, "    %s", strings[i]);
        }
        free (strings);
+#else /* !HAVE_BACKTRACE */
+       DBG1(DBG_DMN, "thread %u received %s",
+                pthread_self(), signal == SIGSEGV ? "SIGSEGV" : "SIGILL");
+#endif /* HAVE_BACKTRACE */
        DBG1(DBG_DMN, "killing ourself hard after SIGSEGV");
        raise(SIGKILL);
 }
index f132c51..efb0554 100644 (file)
@@ -140,6 +140,7 @@ static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
  */
 static void log_stack_frames(void **stack_frames, int stack_frame_count)
 {
+#ifdef HAVE_BACKTRACE
        char **strings;
        size_t i;
 
@@ -152,6 +153,7 @@ static void log_stack_frames(void **stack_frames, int stack_frame_count)
                DBG1("    %s", strings[i]);
        }
        free (strings);
+#endif /* HAVE_BACKTRACE */
 }
 
 /**