X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=libmemcached%2Finstance.cc;h=41f491e8ef2d0e01f8af73dff0227ca7ef73b9fc;hb=79382f4948d4734711dda45e1ac397bf7149076c;hp=aacdad64a3d2262f92a4e137a6c5250e32715c46;hpb=f154f10002fe127f9defcf5f70f9654c2816b965;p=awesomized%2Flibmemcached diff --git a/libmemcached/instance.cc b/libmemcached/instance.cc index aacdad64..41f491e8 100644 --- a/libmemcached/instance.cc +++ b/libmemcached/instance.cc @@ -154,6 +154,7 @@ void __instance_free(org::libmemcached::Instance* self) self->address_info= NULL; self->address_info_next= NULL; } + assert(self->address_info_next == NULL); memcached_error_free(*self); @@ -307,23 +308,26 @@ static org::libmemcached::Instance* memcached_instance_clone(org::libmemcached:: void set_last_disconnected_host(org::libmemcached::Instance* self) { assert(self->root); - if (self->root == NULL) + if (self->root) { - return; - } + if (memcached_server_get_last_disconnect(self->root) and + memcached_server_get_last_disconnect(self->root)->version == self->version) + { + return; + } - if (memcached_server_get_last_disconnect(self->root) and - memcached_server_get_last_disconnect(self->root)->version == self->version) - { - return; - } + // const_cast + memcached_st *root= (memcached_st *)self->root; - // const_cast - memcached_st *root= (memcached_st *)self->root; + memcached_instance_free((org::libmemcached::Instance*)(root->last_disconnected_server)); - memcached_instance_free((org::libmemcached::Instance*)(root->last_disconnected_server)); - root->last_disconnected_server= memcached_instance_clone(self); - ((org::libmemcached::Instance*)memcached_server_get_last_disconnect(root))->version= self->version; + // We set is_parsing so that no lookup happens + root->state.is_parsing= true; + root->last_disconnected_server= memcached_instance_clone(self); + root->state.is_parsing= false; + + ((org::libmemcached::Instance*)memcached_server_get_last_disconnect(root))->version= self->version; + } } memcached_server_instance_st memcached_server_get_last_disconnect(const memcached_st *self)