null+****@clear*****
null+****@clear*****
2011年 6月 14日 (火) 23:35:16 JST
Kouhei Sutou 2011-06-14 14:35:16 +0000 (Tue, 14 Jun 2011)
New Revision: 6aaf16583233947f8dda7e3b1d04a75a8d90530d
Log:
check backtrace() availability for *BSD.
Modified files:
configure.ac
lib/ctx.c
lib/ctx.h
Modified: configure.ac (+1 -1)
===================================================================
--- configure.ac 2011-06-14 14:26:40 +0000 (aa4aabd)
+++ configure.ac 2011-06-14 14:35:16 +0000 (58cf338)
@@ -170,7 +170,7 @@ AC_CHECK_HEADERS(sys/mman.h sys/time.h sys/timeb.h sys/param.h sys/types.h sys/r
AC_CHECK_HEADERS(netdb.h sys/wait.h sys/socket.h netinet/in.h netinet/tcp.h)
AC_CHECK_HEADERS(ucontext.h signal.h errno.h execinfo.h sys/sysctl.h)
AC_CHECK_HEADERS(time.h)
-AC_CHECK_FUNCS(localtime_r gmtime_r)
+AC_CHECK_FUNCS(localtime_r gmtime_r backtrace)
AC_CHECK_LIB(rt, clock_gettime, [
RT_LIBS="-lrt"
AC_DEFINE(HAVE_CLOCK_GETTIME, [1], [use clock_gettime])
Modified: lib/ctx.c (+3 -3)
===================================================================
--- lib/ctx.c 2011-06-14 14:26:40 +0000 (2cf386c)
+++ lib/ctx.c 2011-06-14 14:35:16 +0000 (e26f7a9)
@@ -2499,7 +2499,7 @@ segv_handler(int signal_number, siginfo_t *info, void *context)
segv_received = 1;
GRN_LOG(ctx, GRN_LOG_CRIT, "-- CRASHED!!! --");
-#ifdef HAVE_EXECINFO_H
+#ifdef HAVE_BACKTRACE
# define N_TRACE_LEVEL 1024
{
static void *trace[N_TRACE_LEVEL];
@@ -2514,9 +2514,9 @@ segv_handler(int signal_number, siginfo_t *info, void *context)
free(symbols);
}
}
-#else
+#else /* HAVE_BACKTRACE */
GRN_LOG(ctx, GRN_LOG_CRIT, "backtrace() isn't available.");
-#endif
+#endif /* HAVE_BACKTRACE */
GRN_LOG(ctx, GRN_LOG_CRIT, "----------------");
abort();
}
Modified: lib/ctx.h (+6 -6)
===================================================================
--- lib/ctx.h 2011-06-14 14:26:40 +0000 (0411b80)
+++ lib/ctx.h 2011-06-14 14:35:16 +0000 (453c355)
@@ -90,15 +90,15 @@ extern "C" {
grn_gctx.rc = GRN_SUCCESS;\
} while (0)
-#ifdef HAVE_EXECINFO_H
+#ifdef HAVE_BACKTRACE
#define BACKTRACE(ctx) ((ctx)->ntrace = (unsigned char)backtrace((ctx)->trace, 16))
-#else /* HAVE_EXECINFO_H */
+#else /* HAVE_BACKTRACE */
#define BACKTRACE(ctx)
-#endif /* HAVE_EXECINFO_H */
+#endif /* HAVE_BACKTRACE */
GRN_API void grn_ctx_impl_err(grn_ctx *ctx);
-#ifdef HAVE_EXECINFO_H
+#ifdef HAVE_BACKTRACE
#define LOGTRACE(ctx,lvl) {\
int i;\
char **p;\
@@ -115,9 +115,9 @@ GRN_API void grn_ctx_impl_err(grn_ctx *ctx);
GRN_LOG((ctx), lvl, "%s", GRN_BULK_HEAD(&buf));\
grn_obj_close((ctx), &buf);\
}
-#else /* HAVE_EXECINFO_H */
+#else /* HAVE_BACKTRACE */
#define LOGTRACE(ctx,msg)
-#endif /* HAVE_EXECINFO_H */
+#endif /* HAVE_BACKTRACE */
#define ERRSET(ctx,lvl,r,...) do {\
grn_ctx *ctx_ = (grn_ctx *)ctx;\