summaryrefslogtreecommitdiff
path: root/dev-libs/libmemcached/files/continuum-1.0.18.patch
blob: 17a8afd7ff985d50815a6002f248741b416edaae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
--- a/libmemcached/memcached.cc
+++ b/libmemcached/memcached.cc
@@ -285,6 +285,8 @@ void memcached_servers_reset(memcached_st *shell)
   {
     libmemcached_free(self, self->ketama.continuum);
     self->ketama.continuum= NULL;
+    self->ketama.continuum_count= 0;
+    self->ketama.continuum_points_counter= 0;
 
     memcached_instance_list_free(memcached_instance_list(self), self->number_of_hosts);
     memcached_instance_set(self, NULL, 0);
--- a/tests/libmemcached-1.0/all_tests.h
+++ b/tests/libmemcached-1.0/all_tests.h
@@ -452,6 +452,7 @@ collection_st collection[] ={
   {"hsieh_availability", 0, 0, hsieh_availability},
   {"murmur_availability", 0, 0, murmur_availability},
   {"memcached_server_add", (test_callback_fn*)memcached_servers_reset_SETUP, 0, memcached_server_add_TESTS},
+  {"memcached_server_add(continuum)", (test_callback_fn*)memcached_servers_reset_CONTINUUM, 0, memcached_server_add_TESTS},
   {"memcached_server_add(MEMCACHED_DISTRIBUTION_CONSISTENT)", (test_callback_fn*)memcached_servers_reset_MEMCACHED_DISTRIBUTION_CONSISTENT_SETUP, 0, memcached_server_add_TESTS},
   {"memcached_server_add(MEMCACHED_DISTRIBUTION_CONSISTENT_WEIGHTED)", (test_callback_fn*)memcached_servers_reset_MEMCACHED_DISTRIBUTION_CONSISTENT_WEIGHTED_SETUP, 0, memcached_server_add_TESTS},
   {"block", 0, 0, tests},
--- a/tests/libmemcached-1.0/setup_and_teardowns.cc
+++ b/tests/libmemcached-1.0/setup_and_teardowns.cc
@@ -177,6 +177,16 @@ test_return_t memcached_servers_reset_SETUP(memcached_st *memc)
   return TEST_SUCCESS;
 }
 
+test_return_t memcached_servers_reset_CONTINUUM(memcached_st *memc)
+{
+  memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_DISTRIBUTION, MEMCACHED_DISTRIBUTION_CONSISTENT);
+  memcached_servers_reset(memc);
+  test_compare(0, memc->ketama.continuum_count);
+  // If memc->ketama.continuum_count is non-zero at this point, any call to
+  // memcached_server_add will cause a segfault.
+  return TEST_SUCCESS;
+}
+
 test_return_t memcached_servers_reset_MEMCACHED_DISTRIBUTION_CONSISTENT_SETUP(memcached_st *memc)
 {
   test_compare(TEST_SUCCESS, memcached_servers_reset_SETUP(memc));
--- a/tests/libmemcached-1.0/setup_and_teardowns.h
+++ b/tests/libmemcached-1.0/setup_and_teardowns.h
@@ -64,3 +64,4 @@ test_return_t pre_buffer(memcached_st*);
 test_return_t memcached_servers_reset_MEMCACHED_DISTRIBUTION_CONSISTENT_SETUP(memcached_st *memc);
 test_return_t memcached_servers_reset_MEMCACHED_DISTRIBUTION_CONSISTENT_WEIGHTED_SETUP(memcached_st *memc);
 test_return_t memcached_servers_reset_SETUP(memcached_st *memc);
+test_return_t memcached_servers_reset_CONTINUUM(memcached_st *memc);