Memory leak for failed attempt to use memcached_result_free()
authorBrian Aker <brian@tangent.org>
Sat, 24 Nov 2007 00:38:14 +0000 (16:38 -0800)
committerBrian Aker <brian@tangent.org>
Sat, 24 Nov 2007 00:38:14 +0000 (16:38 -0800)
ChangeLog
include/memcached.h
lib/memcached_get.c

index 9829ffdf175da6a66066ed62f61cb7bb13d45ec7..a10bca6dff254acc46dadc08a4e553ac8eb8341c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 0.11 
   * Added option to memcache_behavior_set() so that poll() can be timed out.
+  * Fixed memory leak in case of using memcached_fetch_result() where no
+    value was returned.
 
 0.10 Tue Nov 20 23:22:31 PST 2007
   * Added append binary test.
index 54f529528c7879b8a6507c68617ec2b90dcb4230..bef7e5d647da275b7fda627bb0f79e9740e017d5 100644 (file)
@@ -257,11 +257,11 @@ memcached_result_st *memcached_fetch_result(memcached_st *ptr,
                                             memcached_return *error);
 
 /* Server Public functions */
-#define memcached_server_count(A) A->number_of_hosts
-#define memcached_server_name(A,B) B.hostname
-#define memcached_server_port(A,B) B.port
-#define memcached_server_list(A) A->hosts
-#define memcached_server_response_count(A,B) A->hosts[B].stack_responses
+#define memcached_server_count(A) (A)->number_of_hosts
+#define memcached_server_name(A,B) (B).hostname
+#define memcached_server_port(A,B) (B).port
+#define memcached_server_list(A) (A)->hosts
+#define memcached_server_response_count(A,B) (A)->hosts[B].stack_responses
 
 memcached_return memcached_server_add_udp(memcached_st *ptr, 
                                           char *hostname,
index 09ec8a374f8e23b10f658bdb895b855e50c0382b..38f6865b53a90d440a6771658c4800ad3d91a0f3 100644 (file)
@@ -380,16 +380,16 @@ memcached_result_st *memcached_fetch_result(memcached_st *ptr,
     }
     else if (*error == MEMCACHED_END && memcached_string_length((memcached_string_st *)(&result->value)) == 0)
     {
-      return NULL;
+      goto error;
     }
     else if (*error == MEMCACHED_END)
     {
       WATCHPOINT_ASSERT(0); /* If this happens we have somehow messed up the fetch */
-      return NULL;
+      goto error;
     }
     else if (*error != MEMCACHED_SUCCESS)
     {
-      return NULL;
+      goto error;
     }
     else
     {
@@ -398,5 +398,8 @@ memcached_result_st *memcached_fetch_result(memcached_st *ptr,
 
   }
 
+error:
+  memcached_result_free(result);
+
   return NULL;
 }