*/
memcached_callback_st cb= *ptr->root->callbacks;
- ptr->root->options.is_processing_input= true;
+ memcached_set_processing_input(ptr->root, true);
char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
memcached_return_t error;
error= memcached_response(ptr, buffer, sizeof(buffer),
&ptr->root->result);
- ptr->root->options.is_processing_input = false;
+ memcached_set_processing_input(ptr->root, false);
if (error == MEMCACHED_SUCCESS)
{
memset(ptr, 0, sizeof(memcached_st));
}
- ptr->options.is_initialized= true;
- ptr->options.is_purging= false;
- ptr->options.is_processing_input= false;
+#if 0
+ memcached_set_purging(ptr, false);
+ memcached_set_processing_input(ptr, false);
+#endif
memcached_set_memory_allocators(ptr, NULL, NULL, NULL, NULL);
{
ptr->call_free(ptr, ptr);
}
- else
- {
- ptr->options.is_initialized= false;
- }
}
/*
#endif
struct memcached_st {
- struct {
- bool is_allocated:1;
- bool is_initialized:1;
- bool is_purging:1;
- bool is_processing_input:1;
- } options;
- memcached_server_distribution_t distribution;
- memcached_hash_t hash;
- uint32_t continuum_points_counter; // Ketama
- memcached_server_st *servers;
- memcached_server_st *last_disconnected_server;
- int32_t snd_timeout;
- int32_t rcv_timeout;
- uint32_t server_failure_limit;
- uint32_t io_msg_watermark;
- uint32_t io_bytes_watermark;
- uint32_t io_key_prefetch;
- uint32_t number_of_hosts;
- int cached_errno;
/**
@note these are static and should not change without a call to behavior.
*/
struct {
+ bool is_purging:1;
+ bool is_processing_input:1;
+ // Everything below here is pretty static.
bool auto_eject_hosts:1;
bool binary_protocol:1;
bool buffer_requests:1;
bool verify_key:1;
bool cork:1;
} flags;
+ memcached_server_distribution_t distribution;
+ memcached_hash_t hash;
+ uint32_t continuum_points_counter; // Ketama
+ memcached_server_st *servers;
+ memcached_server_st *last_disconnected_server;
+ int32_t snd_timeout;
+ int32_t rcv_timeout;
+ uint32_t server_failure_limit;
+ uint32_t io_msg_watermark;
+ uint32_t io_bytes_watermark;
+ uint32_t io_key_prefetch;
+ uint32_t number_of_hosts;
+ int cached_errno;
int32_t poll_timeout;
int32_t connect_timeout;
int32_t retry_timeout;
memcached_trigger_delete_key_fn delete_trigger;
memcached_callback_st *callbacks;
char prefix_key[MEMCACHED_PREFIX_KEY_MAX_SIZE];
+ struct {
+ bool is_allocated:1;
+ } options;
};
LIBMEMCACHED_API
LIBMEMCACHED_LOCAL
memcached_return_t run_distribution(memcached_st *ptr);
+// These are private
#define memcached_is_allocated(__object) ((__object)->options.is_allocated)
#define memcached_is_initialized(__object) ((__object)->options.is_initialized)
+#define memcached_is_purging(__object) ((__object)->flags.is_purging)
+#define memcached_is_processing_input(__object) ((__object)->flags.is_processing_input)
+#define memcached_set_purging(__object, __value) ((__object)->flags.is_purging= (__value))
+#define memcached_set_processing_input(__object, __value) ((__object)->flags.is_processing_input= (__value))
#ifdef __cplusplus
}
uint32_t x;
memcached_return_t ret= MEMCACHED_SUCCESS;
- if (ptr->root->options.is_purging || /* already purging */
+ if (memcached_is_purging(ptr->root) || /* already purging */
(memcached_server_response_count(ptr) < ptr->root->io_msg_watermark &&
ptr->io_bytes_sent < ptr->root->io_bytes_watermark) ||
(ptr->io_bytes_sent >= ptr->root->io_bytes_watermark &&
/* memcached_io_write and memcached_response may call memcached_purge
so we need to be able stop any recursion.. */
- ptr->root->options.is_purging= true;
+ memcached_set_purging(ptr->root, true);
WATCHPOINT_ASSERT(ptr->fd != -1);
/* Force a flush of the buffer to ensure that we don't have the n-1 pending
requests buffered up.. */
if (memcached_io_write(ptr, NULL, 0, 1) == -1)
{
- ptr->root->options.is_purging= true;
+ memcached_set_purging(ptr->root, true);
+
return MEMCACHED_WRITE_FAILURE;
}
WATCHPOINT_ASSERT(ptr->fd != -1);
memcached_result_free(result_ptr);
ptr->root->poll_timeout= timeo;
}
- ptr->root->options.is_purging= false;
+ memcached_set_purging(ptr->root, false);
return ret;
}
memcached_result_st *result)
{
/* We may have old commands in the buffer not set, first purge */
- if ((ptr->root->flags.no_block) && (ptr->root->options.is_processing_input == false))
+ if ((ptr->root->flags.no_block) && (memcached_is_processing_input(ptr->root) == false))
{
(void)memcached_io_write(ptr, NULL, 0, 1);
}
DEBUG_COMMAND= $(LIBTOOL) --mode=execute gdb
+PAHOLE_COMMAND= $(LIBTOOL) --mode=execute pahole
+
if BUILD_LIBMEMCACHEDUTIL
TESTS_LDADDS+= libmemcached/libmemcachedutil.la
endif
test-hash: tests/testhashkit
$(HASH_COMMAND)
+pahole-mem: tests/testapp
+ $(PAHOLE_COMMAND) $(MEM_COMMAND)
+
+
gdb-mem: tests/testapp
$(DEBUG_COMMAND) $(MEM_COMMAND)