Fixing bogus assert in debug build.
authorBrian Aker <brian@gaz>
Tue, 9 Feb 2010 20:44:21 +0000 (12:44 -0800)
committerBrian Aker <brian@gaz>
Tue, 9 Feb 2010 20:44:21 +0000 (12:44 -0800)
libmemcached/hash.c
libmemcached/result.c
libmemcached/watchpoint.h

index dbdcc7ded0f13f122ac42c96ec095092e7ce5b49..1c11c50de2c043bd6df6301945a11f5a3977a2ce 100644 (file)
@@ -28,7 +28,6 @@ uint32_t generate_hash(memcached_st *ptr, const char *key, size_t key_length)
     return 0;
 
   hash= hashkit_digest(&ptr->hashkit, key, key_length);
-  WATCHPOINT_ASSERT(hash);
 
   return hash;
 }
@@ -103,8 +102,6 @@ uint32_t memcached_generate_hash(memcached_st *ptr, const char *key, size_t key_
     hash= generate_hash(ptr, key, key_length);
   }
 
-  WATCHPOINT_ASSERT(hash);
-
   if (memcached_behavior_get(ptr, MEMCACHED_BEHAVIOR_AUTO_EJECT_HOSTS) && ptr->next_distribution_rebuild)
   {
     struct timeval now;
index f673413bf25fe69f923356a33dd3063aa38b531d..037293e7f79af0c4a7471dcc5aca110996fd4098 100644 (file)
@@ -53,6 +53,7 @@ memcached_result_st *memcached_result_create(const memcached_st *memc,
   _result_init(ptr, memc);
 
   ptr->root= memc;
+  WATCHPOINT_SET(ptr->value.options.is_initialized= false);
   memcached_string_create(memc, &ptr->value, 0);
   WATCHPOINT_ASSERT_INITIALIZED(&ptr->value);
   WATCHPOINT_ASSERT(ptr->value.string == NULL);
index 38410194b5c46376d09afc9ac445c7340fccb648..6935a5297568ef43a8b3649d9000663b577bdf95 100644 (file)
 /* Some personal debugging functions */
 #if defined(DEBUG)
 
+#if TARGET_OS_LINUX
+static inline void __stack_dump(void)
+{
+  void *array[10];
+  int size;
+  char **strings;
+
+  size= backtrace(array, 10);
+  strings= backtrace_symbols(array, size);
+
+  fprintf(stderr, "Found %d stack frames.\n", size);
+
+  for (int x= 0; x < size; x++)
+    fprintf(stderr, "%s\n", strings[x]);
+
+  free (strings);
+
+  fflush(stderr);
+}
+
+#else
+
+static inline void __stack_dump(void)
+{ }
+
+#endif // __stack_dump()
+
 #include <assert.h>
 
 #define WATCHPOINT do { fprintf(stderr, "\nWATCHPOINT %s:%d (%s)\n", __FILE__, __LINE__,__func__);fflush(stdout); } while (0)
 #define WATCHPOINT_STRING_LENGTH(A,B) do { fprintf(stderr, "\nWATCHPOINT %s:%d (%s) %.*s\n", __FILE__, __LINE__,__func__,(int)B,A);fflush(stdout); } while (0)
 #define WATCHPOINT_NUMBER(A) do { fprintf(stderr, "\nWATCHPOINT %s:%d (%s) %zu\n", __FILE__, __LINE__,__func__,(size_t)(A));fflush(stdout); } while (0)
 #define WATCHPOINT_ERRNO(A) do { fprintf(stderr, "\nWATCHPOINT %s:%d (%s) %s\n", __FILE__, __LINE__,__func__, strerror(A));fflush(stdout); } while (0)
-#define WATCHPOINT_ASSERT_PRINT(A,B,C) do { if(!(A)){fprintf(stderr, "\nWATCHPOINT ASSERT %s:%d (%s) ", __FILE__, __LINE__,__func__);fprintf(stderr, (B),(C));fprintf(stderr,"\n");fflush(stdout);}assert((A)); } while (0)
-#define WATCHPOINT_ASSERT(A) assert((A))
-#define WATCHPOINT_ASSERT_INITIALIZED(A) assert(memcached_is_initialized((A)))
+#define WATCHPOINT_ASSERT_PRINT(A,B,C) do { if(!(A)){fprintf(stderr, "\nWATCHPOINT ASSERT %s:%d (%s) ", __FILE__, __LINE__,__func__);fprintf(stderr, (B),(C));fprintf(stderr,"\n");fflush(stdout); __stack_dump(); } assert((A)); } while (0)
+#define WATCHPOINT_ASSERT(A) do { if (! (A)) {__stack_dump();} assert((A)); } while (0)
+#define WATCHPOINT_ASSERT_INITIALIZED(A) do { if (! (A)) { __stack_dump(); } assert(memcached_is_initialized((A))); } while (0);
+#define WATCHPOINT_SET(A) do { A; } while(0);
 
 #else
 
@@ -39,6 +67,7 @@
 #define WATCHPOINT_ASSERT_PRINT(A,B,C)
 #define WATCHPOINT_ASSERT(A)
 #define WATCHPOINT_ASSERT_INITIALIZED(A)
+#define WATCHPOINT_SET(A)
 
 #endif /* DEBUG */