Fix for issue where stats may not be initialized.
authorBrian Aker <brian@gaz>
Mon, 18 Jan 2010 23:29:11 +0000 (15:29 -0800)
committerBrian Aker <brian@gaz>
Mon, 18 Jan 2010 23:29:11 +0000 (15:29 -0800)
libmemcached/stats.c
tests/mem_functions.c

index d162277ac0639ecf4640e5a4e9fa6bc2e213bd6a..a47b28205623d46061ad77fbf994b4ca76e1167a 100644 (file)
@@ -357,7 +357,6 @@ error:
 
 memcached_stat_st *memcached_stat(memcached_st *ptr, char *args, memcached_return_t *error)
 {
-  uint32_t x;
   memcached_return_t rc;
   memcached_stat_st *stats;
 
@@ -369,29 +368,32 @@ memcached_stat_st *memcached_stat(memcached_st *ptr, char *args, memcached_retur
 
   stats= libmemcached_calloc(ptr, memcached_server_count(ptr), sizeof(memcached_stat_st));
 
-  stats->root= ptr;
-
-  if (!stats)
+  if (! stats)
   {
     *error= MEMCACHED_MEMORY_ALLOCATION_FAILURE;
     return NULL;
   }
 
   rc= MEMCACHED_SUCCESS;
-  for (x= 0; x < memcached_server_count(ptr); x++)
+  for (uint32_t x= 0; x < memcached_server_count(ptr); x++)
   {
     memcached_return_t temp_return;
     memcached_server_instance_st *instance;
+    memcached_stat_st *stat_instance;
+
+    stat_instance= stats + x;
+
+    stat_instance->root= ptr;
 
     instance= memcached_server_instance_fetch(ptr, x);
 
     if (ptr->flags.binary_protocol)
     {
-      temp_return= binary_stats_fetch(stats + x, args, instance);
+      temp_return= binary_stats_fetch(stat_instance, args, instance);
     }
     else
     {
-      temp_return= ascii_stats_fetch(stats + x, args, instance);
+      temp_return= ascii_stats_fetch(stat_instance, args, instance);
     }
 
     if (temp_return != MEMCACHED_SUCCESS)
@@ -442,11 +444,10 @@ char ** memcached_stat_get_keys(memcached_st *ptr,
   char **list;
   size_t length= sizeof(memcached_stat_keys);
 
-  (void)memc_stat;
-#if 0
-  list= libmemcached_malloc(memc_stat ? memc_stat->root : ptr, length);
-#endif
-  list= libmemcached_malloc(ptr, length);
+  list= libmemcached_malloc(memc_stat && memc_stat->root
+                            ? memc_stat->root
+                            : ptr,
+                            length);
 
   if (!list)
   {
index 5460078c528ca1e2b08a8dd51db167d539035d67..700003f3b43d77ce4ff5d2fd00b6bb8d3bedd392 100644 (file)
@@ -1696,7 +1696,6 @@ static test_return_t version_string_test(memcached_st *memc __attribute__((unuse
 
 static test_return_t get_stats(memcached_st *memc)
 {
- unsigned int x;
  char **stat_list;
  char **ptr;
  memcached_return_t rc;
@@ -1708,7 +1707,7 @@ static test_return_t get_stats(memcached_st *memc)
  test_true(rc == MEMCACHED_SUCCESS);
  test_true(memc_stat);
 
- for (x= 0; x < memcached_server_count(memc); x++)
+ for (uint32_t x= 0; x < memcached_server_count(memc); x++)
  {
    stat_list= memcached_stat_get_keys(memc, memc_stat+x, &rc);
    test_true(rc == MEMCACHED_SUCCESS);