Fix for lingerd and bad free.
author <brian@localhost.localdomain> <>
Tue, 29 Jul 2008 04:55:31 +0000 (21:55 -0700)
committer <brian@localhost.localdomain> <>
Tue, 29 Jul 2008 04:55:31 +0000 (21:55 -0700)
libmemcached/common.h
libmemcached/memcached_connect.c
libmemcached/memcached_hash.c
libmemcached/memcached_hosts.c

index 0c9b87ce3f3478eb8e7984307c7583770276d33f..d496cf773e3c759a7b688d97778abba19618e6ac 100644 (file)
@@ -113,5 +113,7 @@ memcached_return memcachd_key_test(char **keys, size_t *key_length,
 
 memcached_return run_distribution(memcached_st *ptr);
 
+uint32_t generate_hash_value(const char *key, size_t key_length, memcached_hash hash_algorithm);
+
 uint32_t generate_hash(memcached_st *ptr, const char *key, size_t key_length);
 #endif /* __COMMON_H__ */
index 7d6f85a49840c99ed2c8be8114e38a5b030d0200..a4ed6680da1f82323561925d662d35cbb3b024e8 100644 (file)
@@ -48,18 +48,11 @@ static memcached_return set_socket_options(memcached_server_st *ptr)
   if (ptr->root->flags & MEM_NO_BLOCK)
   {
     int error;
-    struct linger linger;
     struct timeval waittime;
 
     waittime.tv_sec= 10;
     waittime.tv_usec= 0;
 
-    linger.l_onoff= 1; 
-    linger.l_linger= MEMCACHED_DEFAULT_TIMEOUT; 
-    error= setsockopt(ptr->fd, SOL_SOCKET, SO_LINGER, 
-                      &linger, (socklen_t)sizeof(struct linger));
-    WATCHPOINT_ASSERT(error == 0);
-
     error= setsockopt(ptr->fd, SOL_SOCKET, SO_SNDTIMEO, 
                       &waittime, (socklen_t)sizeof(struct timeval));
     WATCHPOINT_ASSERT(error == 0);
@@ -69,6 +62,17 @@ static memcached_return set_socket_options(memcached_server_st *ptr)
     WATCHPOINT_ASSERT(error == 0);
   }
 
+  {
+    int error;
+    struct linger linger;
+
+    linger.l_onoff= 1; 
+    linger.l_linger= MEMCACHED_DEFAULT_TIMEOUT; 
+    error= setsockopt(ptr->fd, SOL_SOCKET, SO_LINGER, 
+                      &linger, (socklen_t)sizeof(struct linger));
+    WATCHPOINT_ASSERT(error == 0);
+  }
+
   if (ptr->root->flags & MEM_TCP_NODELAY)
   {
     int flag= 1;
index 75a1537a81e4547f67e8912261331e6dcec0e887..b8c8cfe5529923f1f0c5546a4c0ba04db5434e9d 100644 (file)
@@ -163,7 +163,6 @@ unsigned int dispatch_host(memcached_st *ptr, uint32_t hash)
 uint32_t memcached_generate_hash(memcached_st *ptr, const char *key, size_t key_length)
 {
   uint32_t hash= 1; /* Just here to remove compile warning */
-  uint32_t result= 1;
 
   WATCHPOINT_ASSERT(ptr->number_of_hosts);
 
index 55d7a49df403ea736e905a43f3576748c4069482..c52aa09621c51d549308385b5019c7ac8b0921fa 100644 (file)
@@ -173,7 +173,8 @@ memcached_return update_continuum(memcached_st *ptr)
   qsort(ptr->continuum, ptr->number_of_hosts * MEMCACHED_POINTS_PER_SERVER, sizeof(memcached_continuum_item_st), continuum_item_cmp);
 
   ptr->continuum_points_counter= pointer_counter;
-  memcached_stat_free(NULL, stat_p);
+  if (stat_p)
+    memcached_stat_free(NULL, stat_p);
 
 #ifdef HAVE_DEBUG
   for (index= 0; index < ((ptr->number_of_hosts * MEMCACHED_POINTS_PER_SERVER) - 1); index++)