Set weight correctly.
[m6w6/libmemcached] / libmemcached / server.c
index 22bd6f54ef4b53f1cb3a53b74cd8047e4e8b009b..fa750c257424b9ce98c4f24d6028f7f559caf615 100644 (file)
 /*
   This is a partial implementation for fetching/creating memcached_server_st objects.
 */
-#include "common.h"
+#include <libmemcached/common.h>
 
 static inline void _server_init(memcached_server_st *self, const memcached_st *root,
                                 const char *hostname, in_port_t port,
                                 uint32_t weight, memcached_connection_t type)
 {
-  self->options.sockaddr_inited= false;
   self->options.is_shutting_down= false;
   self->number_of_hosts= 0;
   self->cursor_active= 0;
@@ -27,7 +26,7 @@ static inline void _server_init(memcached_server_st *self, const memcached_st *r
   self->fd= -1;
   self->io_bytes_sent= 0;
   self->server_failure_counter= 0;
-  self->weight= weight;
+  self->weight= weight ? weight : 1; // 1 is the default weight value
   self->state.is_corked= false;
   self->state.is_dead= false;
   WATCHPOINT_SET(self->io_wait_count.read= 0);
@@ -42,6 +41,7 @@ static inline void _server_init(memcached_server_st *self, const memcached_st *r
   self->read_data_length= 0;
   self->write_buffer_offset= 0;
   self->address_info= NULL;
+  self->address_info_next= NULL;
 
   if (root)
   {
@@ -115,7 +115,14 @@ void memcached_server_free(memcached_server_st *self)
 
   if (memcached_is_allocated(self))
   {
-    libmemcached_free(self->root, self);
+    if (self->root)
+    {
+      libmemcached_free(self->root, self);
+    }
+    else
+    {
+      free(self);
+    }
   }
   else
   {