]> git.saurik.com Git - redis.git/commitdiff
some minor changes to the backtrace code
authorantirez <antirez@gmail.com>
Sun, 7 Jun 2009 18:22:43 +0000 (20:22 +0200)
committerantirez <antirez@gmail.com>
Sun, 7 Jun 2009 18:22:43 +0000 (20:22 +0200)
config.h
redis.c

index 79240b754030104e92d66741e9525a315ba9f53e..52f1afdb793e12d341d5e9ae43b2da8a3762923d 100644 (file)
--- a/config.h
+++ b/config.h
@@ -1,10 +1,10 @@
 #ifndef __CONFIG_H
 #define __CONFIG_H
 
-/* malloc_size() */
+/* test for malloc_size() */
 #ifdef __APPLE__
 #include <malloc/malloc.h>
-#define HAVE_MALLOC_SIZE
+#define HAVE_MALLOC_SIZE 1
 #define redis_malloc_size(p) malloc_size(p)
 #endif
 
@@ -17,4 +17,9 @@
 #define redis_stat stat
 #endif
 
+/* test for backtrace() */
+#if defined(__APPLE__) || defined(__linux__)
+#define HAVE_BACKTRACE 1
+#endif
+
 #endif
diff --git a/redis.c b/redis.c
index 84e4be954eb7ab755d9b9389c978867a7f2c151c..2caf06c34ee3e1fede62b919a272ec6721b0ccdf 100644 (file)
--- a/redis.c
+++ b/redis.c
@@ -330,7 +330,6 @@ static int setExpire(redisDb *db, robj *key, time_t when);
 static void updateSalvesWaitingBgsave(int bgsaveerr);
 static void freeMemoryIfNeeded(void);
 static int processCommand(redisClient *c);
-static void segvHandler(int sig, siginfo_t *info, void *secret);
 static void setupSigSegvAction(void);
 
 static void authCommand(redisClient *c);
@@ -4108,7 +4107,7 @@ static void debugCommand(redisClient *c) {
     }
 }
 
-#if defined(__APPLE__) || defined(__linux__)
+#ifdef HAVE_BACKTRACE
 static struct redisFunctionSym symsTable[] = {
 {"freeStringObject", (unsigned long)freeStringObject},
 {"freeListObject", (unsigned long)freeListObject},
@@ -4192,7 +4191,6 @@ static struct redisFunctionSym symsTable[] = {
 {"debugCommand", (unsigned long)debugCommand},
 {"processCommand", (unsigned long)processCommand},
 {"setupSigSegvAction", (unsigned long)setupSigSegvAction},
-{"segvHandler", (unsigned long)segvHandler},
 {"readQueryFromClient", (unsigned long)readQueryFromClient},
 {NULL,0}
 };
@@ -4274,7 +4272,7 @@ static void segvHandler(int sig, siginfo_t *info, void *secret) {
     trace[1] = getMcontextEip(uc);
     messages = backtrace_symbols(trace, trace_size);
 
-    for (i=0; i<trace_size; ++i) {
+    for (i=1; i<trace_size; ++i) {
         char *fn = findFuncName(trace[i], &offset), *p;
 
         p = strchr(messages[i],'+');
@@ -4289,7 +4287,6 @@ static void segvHandler(int sig, siginfo_t *info, void *secret) {
 }
 
 static void setupSigSegvAction(void) {
-#if defined(__APPLE__) || defined(__linux__)
     struct sigaction act;
 
     sigemptyset (&act.sa_mask);
@@ -4299,12 +4296,12 @@ static void setupSigSegvAction(void) {
     act.sa_sigaction = segvHandler;
     sigaction (SIGSEGV, &act, NULL);
     sigaction (SIGBUS, &act, NULL);
-#else
     return;
-#endif
 }
-
-#endif /* if __APPLE__ or __linux__ */
+#else /* HAVE_BACKTRACE */
+static void setupSigSegvAction(void) {
+}
+#endif /* HAVE_BACKTRACE */
 
 /* =================================== Main! ================================ */