Merging bzr://gaz.tangent.org/libmemcached/build/ to Build branch
authorContinuous Integration <ci@tangent.org>
Tue, 3 Apr 2012 06:50:13 +0000 (23:50 -0700)
committerContinuous Integration <ci@tangent.org>
Tue, 3 Apr 2012 06:50:13 +0000 (23:50 -0700)
177 files changed:
.bzrignore
docs/man/hashkit_clone.3
docs/man/hashkit_crc32.3
docs/man/hashkit_create.3
docs/man/hashkit_fnv1_32.3
docs/man/hashkit_fnv1_64.3
docs/man/hashkit_fnv1a_32.3
docs/man/hashkit_fnv1a_64.3
docs/man/hashkit_free.3
docs/man/hashkit_functions.3
docs/man/hashkit_hsieh.3
docs/man/hashkit_is_allocated.3
docs/man/hashkit_jenkins.3
docs/man/hashkit_md5.3
docs/man/hashkit_murmur.3
docs/man/hashkit_value.3
docs/man/libhashkit.3
docs/man/libmemcached.3
docs/man/libmemcached_check_configuration.3
docs/man/libmemcached_configuration.3
docs/man/libmemcached_examples.3
docs/man/libmemcachedutil.3
docs/man/memaslap.1
docs/man/memcached.3
docs/man/memcached_add.3
docs/man/memcached_add_by_key.3
docs/man/memcached_analyze.3
docs/man/memcached_append.3
docs/man/memcached_append_by_key.3
docs/man/memcached_auto.3
docs/man/memcached_behavior.3
docs/man/memcached_behavior_get.3
docs/man/memcached_behavior_set.3
docs/man/memcached_callback.3
docs/man/memcached_callback_get.3
docs/man/memcached_callback_set.3
docs/man/memcached_cas.3
docs/man/memcached_cas_by_key.3
docs/man/memcached_clone.3
docs/man/memcached_create.3
docs/man/memcached_decrement.3
docs/man/memcached_decrement_with_initial.3
docs/man/memcached_delete.3
docs/man/memcached_delete_by_key.3
docs/man/memcached_destroy_sasl_auth_data.3
docs/man/memcached_dump.3
docs/man/memcached_exist.3
docs/man/memcached_exist_by_key.3
docs/man/memcached_fetch.3
docs/man/memcached_fetch_execute.3
docs/man/memcached_fetch_result.3
docs/man/memcached_flush.3
docs/man/memcached_flush_buffers.3
docs/man/memcached_free.3
docs/man/memcached_generate_hash.3
docs/man/memcached_generate_hash_value.3
docs/man/memcached_get.3
docs/man/memcached_get_by_key.3
docs/man/memcached_get_memory_allocators.3
docs/man/memcached_get_sasl_callbacks.3
docs/man/memcached_get_user_data.3
docs/man/memcached_increment.3
docs/man/memcached_increment_with_initial.3
docs/man/memcached_last_error_message.3
docs/man/memcached_lib_version.3
docs/man/memcached_memory_allocators.3
docs/man/memcached_mget.3
docs/man/memcached_mget_by_key.3
docs/man/memcached_mget_execute.3
docs/man/memcached_mget_execute_by_key.3
docs/man/memcached_pool.3
docs/man/memcached_pool_behavior_get.3
docs/man/memcached_pool_behavior_set.3
docs/man/memcached_pool_create.3
docs/man/memcached_pool_destroy.3
docs/man/memcached_pool_fetch.3
docs/man/memcached_pool_pop.3
docs/man/memcached_pool_push.3
docs/man/memcached_pool_release.3
docs/man/memcached_pool_st.3
docs/man/memcached_prepend.3
docs/man/memcached_prepend_by_key.3
docs/man/memcached_quit.3
docs/man/memcached_replace.3
docs/man/memcached_replace_by_key.3
docs/man/memcached_result_cas.3
docs/man/memcached_result_create.3
docs/man/memcached_result_flags.3
docs/man/memcached_result_free.3
docs/man/memcached_result_key_length.3
docs/man/memcached_result_key_value.3
docs/man/memcached_result_length.3
docs/man/memcached_result_st.3
docs/man/memcached_result_value.3
docs/man/memcached_return_t.3
docs/man/memcached_sasl.3
docs/man/memcached_sasl_set_auth_data.3
docs/man/memcached_server_add.3
docs/man/memcached_server_add_unix_socket.3
docs/man/memcached_server_count.3
docs/man/memcached_server_cursor.3
docs/man/memcached_server_list.3
docs/man/memcached_server_list_append.3
docs/man/memcached_server_list_count.3
docs/man/memcached_server_list_free.3
docs/man/memcached_server_push.3
docs/man/memcached_server_st.3
docs/man/memcached_servers.3
docs/man/memcached_servers_parse.3
docs/man/memcached_servers_reset.3
docs/man/memcached_set.3
docs/man/memcached_set_by_key.3
docs/man/memcached_set_memory_allocators.3
docs/man/memcached_set_memory_allocators_context.3
docs/man/memcached_set_sasl_callbacks.3
docs/man/memcached_set_user_data.3
docs/man/memcached_stat.3
docs/man/memcached_stat_execute.3
docs/man/memcached_stat_get_keys.3
docs/man/memcached_stat_get_value.3
docs/man/memcached_stat_servername.3
docs/man/memcached_stats.3
docs/man/memcached_strerror.3
docs/man/memcached_touch.3
docs/man/memcached_touch_by_key.3
docs/man/memcached_user_data.3
docs/man/memcached_verbosity.3
docs/man/memcached_version.3
docs/man/memcapable.1
docs/man/memcat.1
docs/man/memcp.1
docs/man/memdump.1
docs/man/memerror.1
docs/man/memflush.1
docs/man/memrm.1
docs/man/memslap.1
docs/man/memstat.1
libmemcached-1.0/struct/server.h
libmemcached/connect.cc
libmemcached/dump.cc
libmemcached/io.cc
libmemcached/quit.cc
libmemcached/server.cc
libmemcached/storage.cc
libtest/blobslap_worker.cc
libtest/cmdline.cc
libtest/cmdline.h
libtest/comparison.cc
libtest/comparison.hpp
libtest/core.cc
libtest/fatal.hpp
libtest/framework.cc
libtest/framework.h
libtest/gearmand.cc
libtest/memcached.cc
libtest/port.cc
libtest/run.gdb
libtest/runner.h
libtest/server.cc
libtest/server.h
libtest/server_container.cc
libtest/server_container.h
libtest/signal.cc
libtest/strerror.cc
libtest/test.cc
libtest/tmpfile.cc
libtest/unittest.cc
libtest/wait.h
m4/pandora_optimize.m4
memcached/memcached.c
tests/cycle.cc
tests/failure.cc
tests/include.am
tests/libmemcached-1.0/all_tests.cc
tests/libmemcached-1.0/mem_functions.cc
tests/libmemcached_world.h
tests/libmemcached_world_socket.h

index c9674c1d86d84204e71658d97accb4a7b2410aaa..10a4347121d30c93d5e68009ee707550611ec4df 100644 (file)
@@ -147,3 +147,4 @@ libtest/abort
 memcached/.git
 memcached/.gitignore
 memcached/memcached
+memcached/memcached.spec
index 993ffd7204bf46929a9a01cd150b0be6ed4f2bea..6ae1246bc18fe8d23b0fc4dce5f21f6358ecb197 100644 (file)
@@ -1,4 +1,4 @@
-.TH "HASHKIT_CLONE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "HASHKIT_CLONE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 hashkit_clone \- libhashkit Documentation
 .
index 12298a868484d8512f88ba5d775acda23151c06b..df179066232ec67dd9fe8f7117135ed294f20f32 100644 (file)
@@ -1,4 +1,4 @@
-.TH "HASHKIT_CRC32" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "HASHKIT_CRC32" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 hashkit_crc32 \- libhashkit Documentation
 .
index 779a465363b0637d033fbe03027372308114dc72..b40a002b1cef3dc287dbec3e824c636100a6938a 100644 (file)
@@ -1,4 +1,4 @@
-.TH "HASHKIT_CREATE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "HASHKIT_CREATE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 hashkit_create \- libhashkit Documentation
 .
index dc529696780897ad9b7826f583f891f804f2b514..9fcf67e8d07587b9d743e4328f844f1eeaf76c78 100644 (file)
@@ -1,4 +1,4 @@
-.TH "HASHKIT_FNV1_32" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "HASHKIT_FNV1_32" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 hashkit_fnv1_32 \- libhashkit Documentation
 .
index abf8e333ada09e7ab7db24dd4affdaf3b3fba9ce..90223a997201d00b777692822f847523f7828ccc 100644 (file)
@@ -1,4 +1,4 @@
-.TH "HASHKIT_FNV1_64" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "HASHKIT_FNV1_64" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 hashkit_fnv1_64 \- libhashkit Documentation
 .
index 78213cdf6a473d993247c9fe9ecf553d8219d1bb..0518624f03f87b447b0181b806e9af79fb34284d 100644 (file)
@@ -1,4 +1,4 @@
-.TH "HASHKIT_FNV1A_32" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "HASHKIT_FNV1A_32" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 hashkit_fnv1a_32 \- libhashkit Documentation
 .
index 2265a75efe0ce6e0ae225e471b555b0fd5c5b4cd..6df9dc99ecc5667762ce7123f47810bb7c181835 100644 (file)
@@ -1,4 +1,4 @@
-.TH "HASHKIT_FNV1A_64" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "HASHKIT_FNV1A_64" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 hashkit_fnv1a_64 \- libhashkit Documentation
 .
index 217369387200f1fed69ccdd547c3fee85a208d28..f1be30372f3caed4959b77f639200885a3edd7c3 100644 (file)
@@ -1,4 +1,4 @@
-.TH "HASHKIT_FREE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "HASHKIT_FREE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 hashkit_free \- libhashkit Documentation
 .
index 102850d1021c879859252585da79ebe40b219e43..a471a60b0920ab26399f8c7b2ea060d9a5f463e8 100644 (file)
@@ -1,4 +1,4 @@
-.TH "HASHKIT_FUNCTIONS" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "HASHKIT_FUNCTIONS" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 hashkit_functions \- libhashkit Documentation
 .
index a5bb5e6da67a999bb3a956000e9d410f7b042537..6230d7c60c063cdf8bf434db9588e5db68007ef5 100644 (file)
@@ -1,4 +1,4 @@
-.TH "HASHKIT_HSIEH" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "HASHKIT_HSIEH" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 hashkit_hsieh \- libhashkit Documentation
 .
index cf89383bef0165708087236961c13e4131ff5226..f909fff9654f988fc50752d3f821134922dc01c2 100644 (file)
@@ -1,4 +1,4 @@
-.TH "HASHKIT_IS_ALLOCATED" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "HASHKIT_IS_ALLOCATED" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 hashkit_is_allocated \- libhashkit Documentation
 .
index 47db7796aa11953eb328be620e6dc32d964eb7e9..c77ec0dbfed0753dddc30daa57e5b37592ee57e3 100644 (file)
@@ -1,4 +1,4 @@
-.TH "HASHKIT_JENKINS" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "HASHKIT_JENKINS" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 hashkit_jenkins \- libhashkit Documentation
 .
index b7dd56aba4896e574806deb97c8bce59336556b3..0a59d12bfb172229395423b0cec1a9cb8ae602d6 100644 (file)
@@ -1,4 +1,4 @@
-.TH "HASHKIT_MD5" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "HASHKIT_MD5" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 hashkit_md5 \- libhashkit Documentation
 .
index 0a4bd77e1b278b0329d97a7cbe4a446348b3bf6b..71164a19d49f4341cb7fac0e0f7a32247a45008f 100644 (file)
@@ -1,4 +1,4 @@
-.TH "HASHKIT_MURMUR" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "HASHKIT_MURMUR" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 hashkit_murmur \- libhashkit Documentation
 .
index 3f582bf2d40e089391fec6f4bfd6aa5e67ca9356..0e8356987617180ce9e6bbf9e731707529b35da1 100644 (file)
@@ -1,4 +1,4 @@
-.TH "HASHKIT_VALUE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "HASHKIT_VALUE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 hashkit_value \- libhashkit Documentation
 .
index cd079b5ddd28b88c9706f833fb3d8a938f79a1da..6d010e049546cf1a77c6ec475560818c0c53e9ad 100644 (file)
@@ -1,4 +1,4 @@
-.TH "LIBHASHKIT" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "LIBHASHKIT" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 libhashkit \- libhashkit Documentation
 .
index c7a1158537f496718e77f24c86e9bad08da5c9d7..622ad69eb2d81ed1692e7ae93e4d2d1d3ef8dba3 100644 (file)
@@ -1,4 +1,4 @@
-.TH "LIBMEMCACHED" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "LIBMEMCACHED" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 libmemcached \- Introducing the C Client Library for memcached
 .
index 892b5c49f0bcfcf771a4f26ecb44f1141a74bf51..64adab3fd534780292bc27b7bee8b59554daaabf 100644 (file)
@@ -1,4 +1,4 @@
-.TH "LIBMEMCACHED_CHECK_CONFIGURATION" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "LIBMEMCACHED_CHECK_CONFIGURATION" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 libmemcached_check_configuration \- libmemcached Documentation
 .
index 3b75a24e6cc9a2cc2383419de1721dd3120f514f..668068bd9ccf135785ad0b38b53b264784a43893 100644 (file)
@@ -1,4 +1,4 @@
-.TH "LIBMEMCACHED_CONFIGURATION" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "LIBMEMCACHED_CONFIGURATION" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 libmemcached_configuration \- libmemcached Documentation
 .
index 762a3d03f8d06853aba35420143ed7492ec99158..afa87a388e79214362ff9fd2b12d02506da5348b 100644 (file)
@@ -1,4 +1,4 @@
-.TH "LIBMEMCACHED_EXAMPLES" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "LIBMEMCACHED_EXAMPLES" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 libmemcached_examples \- libmemcached Documentation
 .
index d9bdd62081e6cac5d938d0dd1a1186a425b95b25..e78679f6c65e0bf811c478ba79cd53119c87ab4c 100644 (file)
@@ -1,4 +1,4 @@
-.TH "LIBMEMCACHEDUTIL" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "LIBMEMCACHEDUTIL" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 libmemcachedutil \- libmemcached Documentation
 .
index 54b9b6e74c897708e4c66d684019a280e3772316..39d0d510e65ca92acd0fefffaf94beae8bd84bea 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMASLAP" "1" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMASLAP" "1" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memaslap \- libmemcached Documentation
 .
index 04e95d449e37c3317f399dda2f10913a2a171fd9..a5ff2cd8115e7baf71b669280be13c31a804f996 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached \- libmemcached Documentation
 .
index 2bdf0b189ca0e102fb2a57037ad439c8df9cdf4e..9d655c9f1e02e81222cb81b6dd793428cd1896cc 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_ADD" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_ADD" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_add \- Storing and Replacing Data
 .
index ece05ddc939e886ba93a00bee2ec5b63ff5603a9..b0e4bd4ec14389e2902b1a53cc55ea550911ab86 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_ADD_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_ADD_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_add_by_key \- Storing and Replacing Data
 .
index d2a4a53ed2c757e7ef282c463c57c4188f36bfc5..6b6a2494712b64d1848dfe6b4858fb759b591709 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_ANALYZE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_ANALYZE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_analyze \- libmemcached Documentation
 .
index 926ce4c697ce40b3fdd972505a0bd40567d16cb1..ae46d20c75e0b9ab224c2c391c922dbddca561b8 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_APPEND" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_APPEND" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_append \- Appending to or Prepending to data on the server
 .
index a4f916f2dd9c250f3787d190bb1f2c7ffde2f635..62c82a38f0847aa8fb483a5536a0082d36cf7f0c 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_APPEND_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_APPEND_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_append_by_key \- Appending to or Prepending to data on the server
 .
index 143f6af6244f17b09b8db8f917551e83003696ad..5ccda92d74b15bd4b48ba760c92eeb6e9fba8c58 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_AUTO" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_AUTO" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_auto \- Incrementing and Decrementing Values
 .
index abe2f4d63f1d4742e4b0fdf7d455398b85d695f2..037a384a69a6435cc85fd9cd34fefc45dc7a3c9c 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_BEHAVIOR" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_BEHAVIOR" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_behavior \- libmemcached Documentation
 .
index d070d344a458f692b70614e4cc14cb12ff003b60..c5ba20dfed518e2d42e32da559b3eb5016ddb5ea 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_BEHAVIOR_GET" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_BEHAVIOR_GET" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_behavior_get \- libmemcached Documentation
 .
index e11975496bf05ea90d10795f2db13da51fa151ab..5c10edd411b1a581d5cc10971df3056eadfd4537 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_BEHAVIOR_SET" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_BEHAVIOR_SET" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_behavior_set \- libmemcached Documentation
 .
index 850336a2467b9e4596f1868aa92e2da3921c2873..dae80ba041eaf0753da23e7e01dbbab83d011e42 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_CALLBACK" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_CALLBACK" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_callback \- libmemcached Documentation
 .
index 37f5bb8804c660d2efe2dddc63f91f7fbba0b2d6..7fad500179f26f6880aefd3ea4ae3ed2fc7e75c3 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_CALLBACK_GET" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_CALLBACK_GET" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_callback_get \- libmemcached Documentation
 .
index 2a5d1329ee650bf7177748810b45402ec20878c3..0b7b1a297e8719f5036ff933fd267aa33fc3f6e0 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_CALLBACK_SET" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_CALLBACK_SET" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_callback_set \- libmemcached Documentation
 .
index 9c747e79e7d9dafe888772ea8bb091514d5c3766..4244fffc85e9c0e66ce67ca8bdbef4df9f825dec 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_CAS" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_CAS" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_cas \- Working with data on the server in an atomic fashion
 .
index f1613d64b19c07d7dbb88fa37bae482dc79d2247..20e97a11ea47c665bbef7227f54d4b33fec207ba 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_CAS_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_CAS_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_cas_by_key \- Storing and Replacing Data
 .
index 9e57ba16f9b61e0766502793bed6cc61b0a56aa5..8bc4bd09bee6ebab55c9d6c99d17c0c879292924 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_CLONE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_CLONE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_clone \- libmemcached Documentation
 .
index e7832555c032537d2742c6b45cd969cbd7fbe911..05d310d83411fc2ed3faea25ed959a64ac759484 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_CREATE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_CREATE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_create \- libmemcached Documentation
 .
index f49d1e6dd4dd5f331ec7f8dc76c5da2e9d469845..52d82b3db5df279089165b7a54c2bc45a5e284da 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_DECREMENT" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_DECREMENT" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_decrement \- Incrementing and Decrementing Values
 .
index 880614ebb41c0f82ca1ba0f60ea55c7446cadf98..1445202f4d9215c9a70274ea74f0aedd03e969d1 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_DECREMENT_WITH_INITIAL" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_DECREMENT_WITH_INITIAL" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_decrement_with_initial \- Incrementing and Decrementing Values
 .
index 5033df824d3c1d676c3c1a16b4672775fa30aad9..e8c9484b9e588b871eb25895f17eba38603140fe 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_DELETE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_DELETE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_delete \- libmemcached Documentation
 .
index ccde69eabb01dc3390cbec117144b6b89d241694..bc2dd0879a3a97fce4491d93222887a654fbc363 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_DELETE_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_DELETE_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_delete_by_key \- libmemcached Documentation
 .
index b4b2922464232144f3de48010bdf2462d251a2e4..dda077f58306a5464fb4da9ed6698716c359f665 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_DESTROY_SASL_AUTH_DATA" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_DESTROY_SASL_AUTH_DATA" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_destroy_sasl_auth_data \- libmemcached Documentation
 .
index adbf468de21d3f3218530c21a8fbba5883280a74..ff313f59b68d43571aee52bbda4e170e58ff0251 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_DUMP" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_DUMP" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_dump \- libmemcached Documentation
 .
index eb40d1d904a6bb5791037bde69f7af1bb74dff9b..645c35ce3fce7b5220f3c6c3503d7c44abee8c7b 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_EXIST" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_EXIST" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_exist \- libmemcached Documentation
 .
index 9b7f690b5070f6c321b0b6051b291d1c8ac9cb15..9040370c5010cec82091585379aec196f867ce65 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_EXIST_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_EXIST_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_exist_by_key \- libmemcached Documentation
 .
index 665236816fc71de7425e1ae3986ad5c45f23b812..3e4edaac82e7fbd5deb3a2a909b92e32683308aa 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_FETCH" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_FETCH" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_fetch \- Retrieving data from the server
 .
index f0a86dfe180883cc76edd959e537ca17f0c2aba1..1dc3e428b228ad15361c4659e941c33d8386af31 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_FETCH_EXECUTE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_FETCH_EXECUTE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_fetch_execute \- Retrieving data from the server
 .
index a9fff7378e518ea1360f929dd08fa4e40f0d3c53..d367f7d6a8fcfca862f4f5a753c2a137f397620f 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_FETCH_RESULT" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_FETCH_RESULT" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_fetch_result \- Retrieving data from the server
 .
index 19838dbf67ffe456146338d528f88054be656457..bf29a9d0e37da1d73c50907d76c9f92079cc369f 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_FLUSH" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_FLUSH" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_flush \- libmemcached Documentation
 .
index e77a2ad719c8f7bf9ae00b64b621225f9c8dd294..94d443b8211c34758b0ada0c43fd0c2f93fea518 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_FLUSH_BUFFERS" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_FLUSH_BUFFERS" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_flush_buffers \- libmemcached Documentation
 .
index 230d690cfb03c28f6586bffb3d756db46bbf3060..95a877bb1c4263b17d3c9f9e63d868d19f6d8860 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_FREE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_FREE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_free \- libmemcached Documentation
 .
index 50d3ac0e092b1067d96dc8f40d565614c1a929ca..607b9dd833ebf1b380f5325316351dd002a2cda4 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_GENERATE_HASH" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_GENERATE_HASH" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_generate_hash \- Generating hash values directly
 .
index 169dce81e63bfb7ecf220425006ed35490ce7213..8fc74042976e930454dd8428697836fcc1f01386 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_GENERATE_HASH_VALUE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_GENERATE_HASH_VALUE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_generate_hash_value \- Generating hash values directly
 .
index a3bbff260b4290a77a836e8c7cace251dfc023aa..015ca4435247b8e5610cc639919ae29b31742097 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_GET" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_GET" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_get \- Retrieving data from the server
 .
index c754783a9102723de2a095c9097bc9f35cbfafd3..e7accfd73f12cbe80275b62c577b88e6781cbf20 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_GET_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_GET_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_get_by_key \- Retrieving data from the server
 .
index 19592e8b3848a49fcf2185ce7bf721c754cadb89..72858351061f1817087fc7652027df0c99dd229c 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_GET_MEMORY_ALLOCATORS" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_GET_MEMORY_ALLOCATORS" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_get_memory_allocators \- libmemcached Documentation
 .
index 4ccfdb6f788859ab5b8f79842c8c33e8272f74b6..1702cfd431757b2aa24f47c9e58ef72823e99049 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_GET_SASL_CALLBACKS" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_GET_SASL_CALLBACKS" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_get_sasl_callbacks \- libmemcached Documentation
 .
index 3b30f32eaf9541933d5934fce5fcdfda8dfcd33b..04bc14a7e90aa1fb78b3cd76ad6139a43d7ecbb3 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_GET_USER_DATA" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_GET_USER_DATA" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_get_user_data \- libmemcached Documentation
 .
index bf0cd29efb4c88132604f6ffc355a1d70424ea9e..2dda7eae7e831b3b393e915d01e5deb04d4cae52 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_INCREMENT" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_INCREMENT" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_increment \- Incrementing and Decrementing Values
 .
index 78e1716dd1fd5a151eacbf94d912064b9e4ab38e..565ef7a3a7343554e1e660d1e2bd450c1998d89d 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_INCREMENT_WITH_INITIAL" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_INCREMENT_WITH_INITIAL" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_increment_with_initial \- Incrementing and Decrementing Values
 .
index b99ce95bdaedf997482e0db636de06a334c0e645..5715d66163f69e6afcd6fc8fcfe8e719dcbbd646 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_LAST_ERROR_MESSAGE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_LAST_ERROR_MESSAGE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_last_error_message \- libmemcached Documentation
 .
index 9791123a3fae29f2e98ab14f83de4db60ec0d41f..174a91b36cdb92742c8672820c8895e9b6d39def 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_LIB_VERSION" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_LIB_VERSION" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_lib_version \- libmemcached Documentation
 .
index 6a8591f865b1af17d74d66ab0f27693d9dbfb665..c655266696246e6cb0da35ce5bcfa2a5547a8fea 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_MEMORY_ALLOCATORS" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_MEMORY_ALLOCATORS" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_memory_allocators \- libmemcached Documentation
 .
index 505d3d445362b6c167e70727f2af1c0a20b6189f..ec59db80f77d640cef100f5828ed3ce389ee18ce 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_MGET" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_MGET" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_mget \- Retrieving data from the server
 .
index a180538a8c8f8193a32a8bd5b3dc1704a8ec6635..00aee8e0f2e2928f10e3c059df6250f4a7ba68f7 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_MGET_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_MGET_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_mget_by_key \- Retrieving data from the server
 .
index 10c7b41a26481fa942d591c04ffe3a35605e57de..5df2eb332ac134e7318ae9348f7f7b2f7ab894f4 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_MGET_EXECUTE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_MGET_EXECUTE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_mget_execute \- Retrieving data from the server
 .
index d395910403c366503682af64e4bb94ddee884a3e..7da61ad1118acdf7469f43f4ad104713cac0fb8d 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_MGET_EXECUTE_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_MGET_EXECUTE_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_mget_execute_by_key \- Retrieving data from the server
 .
index 52e0f18446b7f73efd693400df25937f103cecf1..4717009a452d598c62c0c330712bdfc92fb53056 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_POOL" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_POOL" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_pool \- libmemcached Documentation
 .
index a89ea1455e01e60cca0dff95eea42fdafc35bd72..01753f062b89c87882b6c7ddd1777411d40b2cf9 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_POOL_BEHAVIOR_GET" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_POOL_BEHAVIOR_GET" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_pool_behavior_get \- libmemcached Documentation
 .
index a72b64d6739cf4aac957d9d6547aa8e1590e8c77..eff8dfe5e9cb740bc88fff6b1c027e835abf02f5 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_POOL_BEHAVIOR_SET" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_POOL_BEHAVIOR_SET" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_pool_behavior_set \- libmemcached Documentation
 .
index 9c66446b9da93f9b17d259c90053d05833ff0182..2edaa5a7d20b300edc1b57d1742eb2ef63ba0294 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_POOL_CREATE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_POOL_CREATE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_pool_create \- libmemcached Documentation
 .
index 5cb7bb9360c4476c51e026280ede2c295f3ae44e..5425e0ded0098ac0cc0216f23161623e471132c2 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_POOL_DESTROY" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_POOL_DESTROY" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_pool_destroy \- libmemcached Documentation
 .
index 60194802bb8d3f2682c0248ef26d96e4f810d5c3..d404601c106cd92ee63a6f12ee2318aa94f95294 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_POOL_FETCH" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_POOL_FETCH" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_pool_fetch \- libmemcached Documentation
 .
index e130d1e45b446d5386491801c21102682ba002ea..d3b90917308ac908a350f78d58ae7824e7e31e21 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_POOL_POP" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_POOL_POP" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_pool_pop \- libmemcached Documentation
 .
index 7ebb7f6d046483ae754a3389596298f0149d5fa7..e75e7b05c5bf006de00d8c6d40a882089a4caefc 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_POOL_PUSH" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_POOL_PUSH" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_pool_push \- libmemcached Documentation
 .
index 0f05ab82831197b5995a07d6d0009f16d09e0afe..d5db78bed94700ad13ba6a1bf96ab24e85c2291a 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_POOL_RELEASE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_POOL_RELEASE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_pool_release \- libmemcached Documentation
 .
index 931742fbd1fe93b71169629241b9394778c41fdf..133f8bd6768cc8fbcdbce909007eb09caa0d07e2 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_POOL_ST" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_POOL_ST" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_pool_st \- libmemcached Documentation
 .
index 514acc6a26e487aa3f73d1f58da4884fc31d9091..500cd34e586efab2411f6203a014dbd42e68cbee 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_PREPEND" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_PREPEND" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_prepend \- Appending to or Prepending to data on the server
 .
index 27d4da33525987a3f2061b1b2135fd075e7951ba..3cddecd2123e28ca0208407db00f5178862246af 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_PREPEND_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_PREPEND_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_prepend_by_key \- Appending to or Prepending to data on the server
 .
index afbc7439a41e998def5ea5ec6805819669fb355a..64fa1fc658f1ce52f6795b53d7a29f2c1cf0c8e7 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_QUIT" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_QUIT" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_quit \- libmemcached Documentation
 .
index e87b6275be665cb7e9612a480935270d24776cd0..71c9a111257b16732b1b89d00fb201d1940bf564 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_REPLACE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_REPLACE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_replace \- Storing and Replacing Data
 .
index 07ca21117ab443ac3082738ddae15c97156e3c47..7a23171ff7d34c85707f45c055102e8e02c0ddc5 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_REPLACE_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_REPLACE_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_replace_by_key \- Storing and Replacing Data
 .
index ff671d25bcd1a18c445d74e286d3963ca46e08ce..bcf979d77eb0b70ce9afc0818c67336ec02faf1e 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_RESULT_CAS" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_RESULT_CAS" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_result_cas \- Working with result sets
 .
index a83b401fac682731d4b7fb0cc58313e578ff6d21..341755b8d2d9dfea46c653d52254d4b66db0d270 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_RESULT_CREATE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_RESULT_CREATE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_result_create \- Working with result sets
 .
index 9f55882862045c9bea2cb13e224d3d305e6b048c..4e20a62515a383aceffbad975ca56aa462218da8 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_RESULT_FLAGS" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_RESULT_FLAGS" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_result_flags \- Working with result sets
 .
index 6e5eac13e4f812ffb85f252c876f1f90760904c0..c26ccdd709c51ecb4c537959bc10d285dddb0ad0 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_RESULT_FREE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_RESULT_FREE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_result_free \- Working with result sets
 .
index 66627ae8e01efa9b3cc5f7a59598f4ed03a166f6..f7cf8732a1d8010bb9e518887af003a409a36903 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_RESULT_KEY_LENGTH" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_RESULT_KEY_LENGTH" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_result_key_length \- Working with result sets
 .
index 8e699feecab347730f5810f32d62dde2d6a89ea1..012f12dae9fc78d830155f3331730d6cb1d06347 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_RESULT_KEY_VALUE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_RESULT_KEY_VALUE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_result_key_value \- Working with result sets
 .
index edaab19916c973879469e33cdd259206494ee1f2..cbc1d62359a281b2b058131eae9193eacd078d47 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_RESULT_LENGTH" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_RESULT_LENGTH" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_result_length \- Working with result sets
 .
index e2e1cc23120cd54afb7c4f3d61cd239c63824c64..f042d1e501351ce3c615f155a19e1538cd0f6014 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_RESULT_ST" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_RESULT_ST" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_result_st \- Working with result sets
 .
index de2cbca674471b80124ea97167ef8bf9de13dc35..45bc9d0014f1ae2ac416ba445e6637ac6f9195ea 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_RESULT_VALUE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_RESULT_VALUE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_result_value \- Working with result sets
 .
index b4cca7f012936f5f728782240db39120e4a17d4c..e8499826d6090961c3982cdff6f7ddc4d269bb76 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_RETURN_T" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_RETURN_T" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_return_t \- Return type values 
 .
index 6bea77a14dac083d7bd66c959fcf7835c5699485..b3b13588a722efda4cd91471d97770c710fdf5e2 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_SASL" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_SASL" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_sasl \- libmemcached Documentation
 .
index d7653d397dfca49db4762eb843f7a7b179682d4f..b3573227fdfb86b9f3321ba796243caf9e32fc07 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_SASL_SET_AUTH_DATA" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_SASL_SET_AUTH_DATA" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_sasl_set_auth_data \- libmemcached Documentation
 .
index 53bed572e4eee31eac49ff73e5c4a8b0614e7940..b0d0cf4ca255ab42e08294288dcf0e2b36e84a80 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_SERVER_ADD" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_SERVER_ADD" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_server_add \- libmemcached Documentation
 .
index 66a1798759f4a85c5740c52860e8691b63651d4f..d5cf47d720351b12b7e1691c270c0d1eb57e7fb0 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_SERVER_ADD_UNIX_SOCKET" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_SERVER_ADD_UNIX_SOCKET" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_server_add_unix_socket \- libmemcached Documentation
 .
index ac100003d30d42054cc1bf55b630e0edb0ba19c2..ec53388c906e8341d16d019dce1996bbe6387892 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_SERVER_COUNT" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_SERVER_COUNT" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_server_count \- libmemcached Documentation
 .
index 3854734dd7b25b93fa9df99658c677be9c3c6ca8..ff775f6d863474a62b5d4e59b98e7bbd26d9ed4a 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_SERVER_CURSOR" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_SERVER_CURSOR" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_server_cursor \- libmemcached Documentation
 .
index 1e3551ee903752ded7e7d09d7bc15b1e72782707..914c7ee6a29e28aeca607da9c986c38705619386 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_SERVER_LIST" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_SERVER_LIST" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_server_list \- libmemcached Documentation
 .
index 8e0a82a8b70498f3f4eb06e53bce30d6818c0304..f63b339d0d01d98481fdda22fe84f2518974530a 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_SERVER_LIST_APPEND" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_SERVER_LIST_APPEND" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_server_list_append \- libmemcached Documentation
 .
index 5462025785f92a3a782145de81dd031164b74dcb..cd572a2bf936ff53ebc66c73013b6b2a9d49f620 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_SERVER_LIST_COUNT" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_SERVER_LIST_COUNT" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_server_list_count \- libmemcached Documentation
 .
index 916191e60a5c7d7e94562e176bfedaa632c40ab0..94007165f02af4bfb9c8c7017449d95211a77c80 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_SERVER_LIST_FREE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_SERVER_LIST_FREE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_server_list_free \- libmemcached Documentation
 .
index d2355e479a796e14ef165cbb911bb3e184150b8d..138c30913e001fd5fa117657e82f06f2425a14c2 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_SERVER_PUSH" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_SERVER_PUSH" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_server_push \- libmemcached Documentation
 .
index f145981be50ddb28d7a32728bbbfd27ed2885fa8..ddfb5043b68aa5c3880fdf1a82d50d4b0558831e 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_SERVER_ST" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_SERVER_ST" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_server_st \- libmemcached Documentation
 .
index e8e712610e062b6204950949ad2d0ff160590323..f81fb8e9fefac72630b665110fe0bdf86c78338f 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_SERVERS" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_SERVERS" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_servers \- libmemcached Documentation
 .
index 564aab2169683cfe2dd1ad197c365c19f6168dd5..cafe4065fd59c4f7f91eb073edad7a33e2680e8a 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_SERVERS_PARSE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_SERVERS_PARSE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_servers_parse \- libmemcached Documentation
 .
index 821d7cb02ddbbe87f0974e2b7e2ae166539fca41..2b9c10a8e28a5c5397b3053cae90a10925f03a9f 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_SERVERS_RESET" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_SERVERS_RESET" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_servers_reset \- libmemcached Documentation
 .
index cab8b093907b729315e62ac793f1485e066e4120..5b7d44d941615defc57d48b56d28f6c5b7ed219d 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_SET" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_SET" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_set \- Storing and Replacing Data
 .
index bad62ad17876355f42c507fce168e41ea55de55e..b25ee14adb0e985d95ee9e1dba4644be14bd7b82 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_SET_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_SET_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_set_by_key \- Storing and Replacing Data
 .
index 2be6aef3a7a4a85f297f72bfafb632a540718873..0c1504935f9d9515f81a936d503fbb5d5ee4f687 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_SET_MEMORY_ALLOCATORS" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_SET_MEMORY_ALLOCATORS" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_set_memory_allocators \- libmemcached Documentation
 .
index 888585957556f9c75353e638fd28f8761c691026..387e9d93c46cdd599cb035aef37f26b59083e998 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_SET_MEMORY_ALLOCATORS_CONTEXT" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_SET_MEMORY_ALLOCATORS_CONTEXT" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_set_memory_allocators_context \- libmemcached Documentation
 .
index b8b679a4580ab54c572692a7cbd5a07071df3321..02d506229dc93079927d7f261db86118ca6ab7f6 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_SET_SASL_CALLBACKS" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_SET_SASL_CALLBACKS" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_set_sasl_callbacks \- libmemcached Documentation
 .
index e0e45aec71e634babdfcff59a132b63312e05bde..b2756e8262b34166cb270e074a3ab1e534eedbb2 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_SET_USER_DATA" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_SET_USER_DATA" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_set_user_data \- libmemcached Documentation
 .
index acbc3f057a39838425d9b950a76c28499a1653c5..270ea12b980d14d97d3557febc56147e0329ab6f 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_STAT" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_STAT" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_stat \- libmemcached Documentation
 .
index a776b757e9b30f7c24969cdeb14122b902c84ee1..48b80af033251219fb3f5072c75b856d97af537c 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_STAT_EXECUTE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_STAT_EXECUTE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_stat_execute \- libmemcached Documentation
 .
index 6a3c079af75b7730e5d29505234c79852f5e428e..c88b723a778a4b46bc6bc0555079f8fca806c788 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_STAT_GET_KEYS" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_STAT_GET_KEYS" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_stat_get_keys \- libmemcached Documentation
 .
index 80834d2f03623e4f153e87818a23d104eac8709e..9229b981b707aa047b38e8ff956ae2b14aa0515a 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_STAT_GET_VALUE" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_STAT_GET_VALUE" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_stat_get_value \- libmemcached Documentation
 .
index 2617d7e00fed8a29baa372b30cf74886c6c3bb43..ee0a50235acc1603987b9583047ca9a95efdd37e 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_STAT_SERVERNAME" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_STAT_SERVERNAME" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_stat_servername \- libmemcached Documentation
 .
index 699ebf8559a82bcbca43ebe1d79acdf85ffc1e04..92a5dcdb0cd3f62e34804b15c0613c1c5243ee23 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_STATS" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_STATS" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_stats \- libmemcached Documentation
 .
index b91a09e1c19c21d9b9e7ff857baf73ad1fcd25c8..2e947309fd9a50fe8795cdae6504a92bce27743f 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_STRERROR" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_STRERROR" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_strerror \- libmemcached Documentation
 .
index 57db893bfe19235d53ad44c9b8f4c5f01069c87a..e4c2df0741a09dbea91f2e45974c114df3b690f8 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_TOUCH" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_TOUCH" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_touch \- libmemcached Documentation
 .
index f1d0b11c3987b8d3f9e73ea58e3ba7c22f7f42c8..5fa1dc51a64ec9c9b6a1a54fd65ec3f91ea5c3e4 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_TOUCH_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_TOUCH_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_touch_by_key \- libmemcached Documentation
 .
index d9852413de046bb2966dcb9b7612028c609e8f18..e0408ca678deeabcd78e603dab47571452d61b6a 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_USER_DATA" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_USER_DATA" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_user_data \- libmemcached Documentation
 .
index 2484cfad2479aae5bd8f8ad09154a8045f6eca4c..5f0438d040fcd665f69467e891c4ba69f8362318 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_VERBOSITY" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_VERBOSITY" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_verbosity \- libmemcached Documentation
 .
index cf06a1e387f293e925a067964402eb7df02f3baf..78ac2816b0e5945354739faad2aa500d85c82f5c 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCACHED_VERSION" "3" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCACHED_VERSION" "3" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcached_version \- libmemcached Documentation
 .
index 662ba8b6f0c13653f0ebfe3d5bc48c4489bf9172..6769d879222d85711b0bebf55ce1eca24a290091 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCAPABLE" "1" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCAPABLE" "1" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcapable \- libmemcached Documentation
 .
index b3384f7c11092527970732c4f89e6631d3794f1d..fa9e822e6a55154fccf568b1060dd239c2bff7ea 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCAT" "1" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCAT" "1" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcat \- libmemcached Documentation
 .
index 2f739a2314605cf067a249d24e874d99bc22d5a6..a2acd96522206dee8d43e24e12efe57f7f64f376 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMCP" "1" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMCP" "1" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memcp \- libmemcached Documentation
 .
index 2b0c3745c913f6f6c8697b3cc4a7764e3e60f627..cfef414e1778c80ab33e7e4f444a66acd6639e1e 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMDUMP" "1" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMDUMP" "1" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memdump \- libmemcached Documentation
 .
index 9d1bd9a57f100db3b78aaf9c52fb0cfb646b9623..51e97fb936fef5e79ccccdd0ac6205f4cfc9a6f0 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMERROR" "1" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMERROR" "1" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memerror \- libmemcached Documentation
 .
index 99c70a0e33c970c6430bf1597cd0c1fe11256a23..05d297c268e6fcf61becdac4ee16a1200b043a16 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMFLUSH" "1" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMFLUSH" "1" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memflush \- libmemcached Documentation
 .
index 5dc9b7986e54747b9b5f2eaedf2ee7b530cb30c8..6c6ab403c097130ef7da9486902061c506108a0a 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMRM" "1" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMRM" "1" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memrm \- libmemcached Documentation
 .
index 0119e34b1c8610701ea211a0e03f1a5dcea4018a..aca06e0fbf52ce085e51a82f22e6956818ea08ba 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMSLAP" "1" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMSLAP" "1" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memslap \- libmemcached Documentation
 .
index 58c3693182fb7622ae8c9f29631ff43931862605..f8b4dc25f1acf5472b963a7534dbc1f126b5d301 100644 (file)
@@ -1,4 +1,4 @@
-.TH "MEMSTAT" "1" "March 23, 2012" "1.0.5" "libmemcached"
+.TH "MEMSTAT" "1" "April 02, 2012" "1.0.5" "libmemcached"
 .SH NAME
 memstat \- libmemcached Documentation
 .
index 245b4b9bbf6964703a24c055f6d948834d02d2ab..e2be59b87a960dd3c797f522b1fb31cc4e67e681 100644 (file)
@@ -82,6 +82,7 @@ struct memcached_server_st {
   struct {
     uint32_t read;
     uint32_t write;
+    uint32_t timeouts;
   } io_wait_count;
   uint8_t major_version; // Default definition of UINT8_MAX means that it has not been set.
   uint8_t micro_version; // ditto
index 8434ba8b3a5f675ab0314c887aaee3db4d2c7705..9d50e5c0dc05ecc1ad1f0ecd754077a1ff9eda15 100644 (file)
@@ -78,6 +78,7 @@ static memcached_return_t connect_poll(memcached_server_st *server)
       }
     case 0:
       {
+        server->io_wait_count.timeouts++;
         return memcached_set_error(*server, MEMCACHED_TIMEOUT, MEMCACHED_AT);
       }
 
index 5ba4ce1624c185c6b8e5b8c858fa498c84d512b5..8a2ba14467d46d71a1f7d5d555f1a1d6794f745b 100644 (file)
@@ -77,7 +77,7 @@ static memcached_return_t ascii_dump(memcached_st *memc, memcached_dump_fn *call
       }
       else
       {
-        return memcached_set_error(*instance, vdo_rc, MEMCACHED_AT);
+        return vdo_rc;
       }
     }
 
@@ -128,7 +128,7 @@ static memcached_return_t ascii_dump(memcached_st *memc, memcached_dump_fn *call
       else
       {
         // IO error of some sort must have occurred
-        return memcached_set_error(*instance, response_rc, MEMCACHED_AT);
+        return response_rc;
       }
     }
   }
index 049c436dbcb7f24e12a2511c32b00e88b192bade..94686d0590851a26c16b9cce32bc3858080b0661 100644 (file)
@@ -153,7 +153,9 @@ static bool process_input_buffer(memcached_server_write_instance_st ptr)
       {
         error= (*cb.callback[x])(ptr->root, &root->result, cb.context);
         if (error != MEMCACHED_SUCCESS)
+        {
           break;
+        }
       }
 
       /* @todo what should I do with the error message??? */
@@ -168,20 +170,6 @@ static bool process_input_buffer(memcached_server_write_instance_st ptr)
 static memcached_return_t io_wait(memcached_server_write_instance_st ptr,
                                   const memc_read_or_write read_or_write)
 {
-  struct pollfd fds;
-  fds.fd= ptr->fd;
-  fds.events= POLLIN;
-
-  if (read_or_write == MEM_WRITE) /* write */
-  {
-    fds.events= POLLOUT;
-    WATCHPOINT_SET(ptr->io_wait_count.write++);
-  }
-  else
-  {
-    WATCHPOINT_SET(ptr->io_wait_count.read++);
-  }
-
   /*
    ** We are going to block on write, but at least on Solaris we might block
    ** on write if we haven't read anything from our input buffer..
@@ -198,6 +186,21 @@ static memcached_return_t io_wait(memcached_server_write_instance_st ptr,
     }
   }
 
+  struct pollfd fds;
+  memset(&fds, 0, sizeof(pollfd));
+  fds.fd= ptr->fd;
+  fds.events= POLLIN;
+
+  if (read_or_write == MEM_WRITE) /* write */
+  {
+    fds.events= POLLOUT;
+    ptr->io_wait_count.write++;
+  }
+  else
+  {
+    ptr->io_wait_count.read++;
+  }
+
   if (ptr->root->poll_timeout == 0) // Mimic 0 causes timeout behavior (not all platforms do this)
   {
     return memcached_set_error(*ptr, MEMCACHED_TIMEOUT, MEMCACHED_AT);
@@ -206,21 +209,20 @@ static memcached_return_t io_wait(memcached_server_write_instance_st ptr,
   size_t loop_max= 5;
   while (--loop_max) // While loop is for ERESTART or EINTR
   {
+    int active_fd= poll(&fds, 1, ptr->root->poll_timeout);
+    assert_msg(active_fd <= 1 , "poll() returned an unexpected value");
 
-    int error= poll(&fds, 1, ptr->root->poll_timeout);
-    switch (error)
+    if (active_fd == 1)
     {
-    case 1: // Success!
-      WATCHPOINT_IF_LABELED_NUMBER(read_or_write && loop_max < 4, "read() times we had to loop, decremented down from 5", loop_max);
-      WATCHPOINT_IF_LABELED_NUMBER(!read_or_write && loop_max < 4, "write() times we had to loop, decremented down from 5", loop_max);
-
       return MEMCACHED_SUCCESS;
-
-    case 0: // Timeout occured, we let the while() loop do its thing.
+    }
+    else if (active_fd == 0)
+    {
+      ptr->io_wait_count.timeouts++;
       return memcached_set_error(*ptr, MEMCACHED_TIMEOUT, MEMCACHED_AT);
-
-    default:
-      WATCHPOINT_ERRNO(get_socket_errno());
+    }
+    else // -1
+    {
       switch (get_socket_errno())
       {
 #ifdef TARGET_OS_LINUX
@@ -237,24 +239,20 @@ static memcached_return_t io_wait(memcached_server_write_instance_st ptr,
         return memcached_set_error(*ptr, MEMCACHED_MEMORY_ALLOCATION_FAILURE, MEMCACHED_AT, memcached_literal_param("RLIMIT_NOFILE exceeded, or if OSX the timeout value was invalid"));
 
       default:
+        int local_errno= get_socket_errno(); // We cache in case memcached_quit_server() modifies errno
         if (fds.revents & POLLERR)
         {
           int err;
           socklen_t len= sizeof (err);
           if (getsockopt(ptr->fd, SOL_SOCKET, SO_ERROR, &err, &len) == 0)
           {
-            if (err == 0)
+            if (err == 0) // treat this as EINTR
             {
               continue;
             }
-            errno= err;
+            local_errno= err;
           }
         }
-        else
-        {
-          memcached_set_errno(*ptr, get_socket_errno(), MEMCACHED_AT);
-        }
-        int local_errno= get_socket_errno(); // We cache in case memcached_quit_server() modifies errno
         memcached_quit_server(ptr, true);
 
         return memcached_set_errno(*ptr, local_errno, MEMCACHED_AT);
@@ -349,6 +347,7 @@ static bool io_flush(memcached_server_write_instance_st ptr,
           }
           else if (rc == MEMCACHED_TIMEOUT)
           {
+            ptr->io_wait_count.timeouts++;
             error= memcached_set_error(*ptr, MEMCACHED_TIMEOUT, MEMCACHED_AT);
             return false;
           }
@@ -401,7 +400,7 @@ memcached_return_t memcached_io_read(memcached_server_write_instance_st ptr,
 
   while (length)
   {
-    if (not ptr->read_buffer_length)
+    if (ptr->read_buffer_length == 0)
     {
       ssize_t data_read;
       do
@@ -422,11 +421,15 @@ memcached_return_t memcached_io_read(memcached_server_write_instance_st ptr,
 #ifdef TARGET_OS_LINUX
           case ERESTART:
 #endif
-            if (memcached_success(io_wait(ptr, MEM_READ)))
             {
-              continue;
+              memcached_return_t io_wait_ret;
+              if (memcached_success(io_wait_ret= io_wait(ptr, MEM_READ)))
+              {
+                continue;
+              }
+
+              return io_wait_ret;
             }
-            return MEMCACHED_IN_PROGRESS;
 
             /* fall through */
 
@@ -600,7 +603,7 @@ static ssize_t _io_write(memcached_server_write_instance_st ptr,
     }
   }
 
-  return (ssize_t) original_length;
+  return ssize_t(original_length);
 }
 
 bool memcached_io_write(memcached_server_write_instance_st ptr)
index 9aadd605f71ea802009686c1b20bb897507b2203..2cfc44b56dab85abc371502d818ddca1f1caa317 100644 (file)
@@ -79,8 +79,6 @@ void memcached_quit_server(memcached_server_st *ptr, bool io_death)
         rc= memcached_vdo(ptr, vector, 1, true);
       }
 
-      WATCHPOINT_ASSERT(rc == MEMCACHED_SUCCESS or rc == MEMCACHED_FETCH_NOTFINISHED);
-
       /* read until socket is closed, or there is an error
        * closing the socket before all data is read
        * results in server throwing away all data which is
@@ -89,11 +87,18 @@ void memcached_quit_server(memcached_server_st *ptr, bool io_death)
        * In .40 we began to only do this if we had been doing buffered
        * requests of had replication enabled.
        */
-      if (ptr->root->flags.buffer_requests or ptr->root->number_of_replicas)
+      if (memcached_success(rc) and (ptr->root->flags.buffer_requests or ptr->root->number_of_replicas))
       {
-        memcached_return_t rc_slurp;
-        while (memcached_continue(rc_slurp= memcached_io_slurp(ptr))) {} ;
-        WATCHPOINT_ASSERT(rc_slurp == MEMCACHED_CONNECTION_FAILURE);
+        if (0)
+        {
+          memcached_return_t rc_slurp;
+          while (memcached_continue(rc_slurp= memcached_io_slurp(ptr))) {} ;
+          WATCHPOINT_ASSERT(rc_slurp == MEMCACHED_CONNECTION_FAILURE);
+        }
+        else
+        {
+          memcached_io_slurp(ptr);
+        }
       }
 
       /*
index b742f7ef1695cde1da2fe736b7b12e0dc120e609..f2f78211fe35beedb73ce138f64d4e950cf97677 100644 (file)
@@ -55,8 +55,9 @@ static inline void _server_init(memcached_server_st *self, memcached_st *root,
   self->server_failure_counter= 0;
   self->server_failure_counter_query_id= 0;
   self->weight= weight ? weight : 1; // 1 is the default weight value
-  WATCHPOINT_SET(self->io_wait_count.read= 0);
-  WATCHPOINT_SET(self->io_wait_count.write= 0);
+  self->io_wait_count.read= 0;
+  self->io_wait_count.write= 0;
+  self->io_wait_count.timeouts= 0;
   self->major_version= UINT8_MAX;
   self->micro_version= UINT8_MAX;
   self->minor_version= UINT8_MAX;
@@ -310,8 +311,10 @@ void memcached_server_error_reset(memcached_server_st *self)
 memcached_server_instance_st memcached_server_get_last_disconnect(const memcached_st *self)
 {
   WATCHPOINT_ASSERT(self);
-  if (not self)
+  if (self == NULL)
+  {
     return 0;
+  }
 
   return self->last_disconnected_server;
 }
@@ -319,8 +322,10 @@ memcached_server_instance_st memcached_server_get_last_disconnect(const memcache
 uint32_t memcached_servers_set_count(memcached_server_st *servers, uint32_t count)
 {
   WATCHPOINT_ASSERT(servers);
-  if (not servers)
+  if (servers == NULL)
+  {
     return 0;
+  }
 
   return servers->number_of_hosts= count;
 }
@@ -328,7 +333,7 @@ uint32_t memcached_servers_set_count(memcached_server_st *servers, uint32_t coun
 uint32_t memcached_server_count(const memcached_st *self)
 {
   WATCHPOINT_ASSERT(self);
-  if (not self)
+  if (self == NULL)
     return 0;
 
   return self->number_of_hosts;
@@ -337,7 +342,7 @@ uint32_t memcached_server_count(const memcached_st *self)
 const char *memcached_server_name(const memcached_server_instance_st self)
 {
   WATCHPOINT_ASSERT(self);
-  if (not self)
+  if (self == NULL)
     return NULL;
 
   return self->hostname;
@@ -346,7 +351,7 @@ const char *memcached_server_name(const memcached_server_instance_st self)
 in_port_t memcached_server_port(const memcached_server_instance_st self)
 {
   WATCHPOINT_ASSERT(self);
-  if (not self)
+  if (self == NULL)
     return 0;
 
   return self->port;
@@ -355,7 +360,7 @@ in_port_t memcached_server_port(const memcached_server_instance_st self)
 uint32_t memcached_server_response_count(const memcached_server_instance_st self)
 {
   WATCHPOINT_ASSERT(self);
-  if (not self)
+  if (self == NULL)
     return 0;
 
   return self->cursor_active;
index 1b3dbcddd7cd15e220db0b11d5884ef54820931a..1d75eb9a3aa143d21c4406aa30f73bf8849181e4 100644 (file)
@@ -175,10 +175,12 @@ static memcached_return_t memcached_send_binary(memcached_st *ptr,
   {
     memcached_io_reset(server);
 
+#if 0
     if (memcached_has_error(ptr))
     {
       memcached_set_error(*server, rc, MEMCACHED_AT);
     }
+#endif
 
     return MEMCACHED_WRITE_FAILURE;
   }
@@ -319,10 +321,12 @@ static memcached_return_t memcached_send_ascii(memcached_st *ptr,
   }
 
   assert(memcached_failed(rc));
+#if 0
   if (memcached_has_error(ptr) == false)
   {
     return memcached_set_error(*ptr, rc, MEMCACHED_AT);
   }
+#endif
 
   return rc;
 }
@@ -403,10 +407,6 @@ memcached_return_t memcached_add(memcached_st *ptr,
                      key, key_length, value, value_length,
                      expiration, flags, 0, ADD_OP);
 
-  if (rc == MEMCACHED_NOTSTORED or rc == MEMCACHED_DATA_EXISTS)
-  {
-    memcached_set_error(*ptr, rc, MEMCACHED_AT);
-  }
   LIBMEMCACHED_MEMCACHED_ADD_END();
   return rc;
 }
index caddbdd764cc5d9944e30e94343a4ff5fade480f..f341962061da1a4a17855bc4baaa2ae3856d481a 100644 (file)
@@ -49,7 +49,7 @@ class BlobslapWorker : public Server
 private:
 public:
   BlobslapWorker(in_port_t port_arg) :
-    Server("localhost", port_arg)
+    Server("localhost", port_arg, "benchmark/blobslap_worker", true)
   { 
     set_pid_file();
   }
@@ -118,16 +118,6 @@ public:
     return "blobslap_worker";
   };
 
-  const char *executable()
-  {
-    return "benchmark/blobslap_worker";
-  }
-
-  const char *daemon_file_option()
-  {
-    return "--daemon";
-  }
-
   bool has_port_option() const
   {
     return true;
index e774113a87f75bc5f8635f1f3312bd02a075d7dc..f6d1e3d65fae37624b283e4f5f4d2598bd18ac0f 100644 (file)
@@ -30,6 +30,7 @@ using namespace libtest;
 #include <fcntl.h>
 #include <fstream>
 #include <memory>
+#include <poll.h>
 #include <spawn.h>
 #include <sstream>
 #include <string>
@@ -108,6 +109,9 @@ Application::Application(const std::string& arg, const bool _use_libtool_arg) :
   _use_gdb(false),
   _argc(0),
   _exectuble(arg),
+  stdin_fd(STDIN_FILENO),
+  stdout_fd(STDOUT_FILENO),
+  stderr_fd(STDERR_FILENO),
   built_argv(NULL),
   _pid(-1)
   { 
@@ -115,7 +119,7 @@ Application::Application(const std::string& arg, const bool _use_libtool_arg) :
     {
       if (libtool() == NULL)
       {
-        throw "libtool requested, but know libtool was found";
+        fatal_message("libtool requested, but know libtool was found");
       }
     }
 
@@ -142,6 +146,7 @@ Application::Application(const std::string& arg, const bool _use_libtool_arg) :
 
 Application::~Application()
 {
+  murder();
   delete_argv();
 }
 
@@ -156,9 +161,16 @@ Application::error_t Application::run(const char *args[])
   posix_spawn_file_actions_t file_actions;
   posix_spawn_file_actions_init(&file_actions);
 
-  stdin_fd.dup_for_spawn(Application::Pipe::READ, file_actions, STDIN_FILENO);
-  stdout_fd.dup_for_spawn(Application::Pipe::WRITE, file_actions, STDOUT_FILENO);
-  stderr_fd.dup_for_spawn(Application::Pipe::WRITE, file_actions, STDERR_FILENO);
+  stdin_fd.dup_for_spawn(Application::Pipe::READ, file_actions);
+  stdout_fd.dup_for_spawn(Application::Pipe::WRITE, file_actions);
+  stderr_fd.dup_for_spawn(Application::Pipe::WRITE, file_actions);
+
+  posix_spawnattr_t spawnattr;
+  posix_spawnattr_init(&spawnattr);
+
+  sigset_t set;
+  sigemptyset(&set);
+  fatal_assert(posix_spawnattr_setsigmask(&spawnattr, &set) == 0);
   
   create_argv(args);
 
@@ -197,7 +209,7 @@ Application::error_t Application::run(const char *args[])
         const_cast<char *>(_exectuble_with_path.c_str()), 
         0};
 
-      spawn_ret= posix_spawnp(&_pid, libtool(), &file_actions, NULL, argv, NULL);
+      spawn_ret= posix_spawnp(&_pid, libtool(), &file_actions, &spawnattr, argv, NULL);
     }
     else
     {
@@ -210,22 +222,23 @@ Application::error_t Application::run(const char *args[])
         const_cast<char *>(gdb_run_file.c_str()), 
         const_cast<char *>(_exectuble_with_path.c_str()), 
         0};
-      spawn_ret= posix_spawnp(&_pid, "gdb", &file_actions, NULL, argv, NULL);
+      spawn_ret= posix_spawnp(&_pid, "gdb", &file_actions, &spawnattr, argv, NULL);
     }
   }
   else
   {
     if (_use_libtool)
     {
-      spawn_ret= posix_spawn(&_pid, built_argv[0], &file_actions, NULL, built_argv, NULL);
+      spawn_ret= posix_spawn(&_pid, built_argv[0], &file_actions, &spawnattr, built_argv, NULL);
     }
     else
     {
-      spawn_ret= posix_spawnp(&_pid, built_argv[0], &file_actions, NULL, built_argv, NULL);
+      spawn_ret= posix_spawnp(&_pid, built_argv[0], &file_actions, &spawnattr, built_argv, NULL);
     }
   }
 
   posix_spawn_file_actions_destroy(&file_actions);
+  posix_spawnattr_destroy(&spawnattr);
 
   stdin_fd.close(Application::Pipe::READ);
   stdout_fd.close(Application::Pipe::WRITE);
@@ -233,81 +246,169 @@ Application::error_t Application::run(const char *args[])
 
   if (spawn_ret)
   {
+    _pid= -1;
     return Application::INVALID;
   }
 
   return Application::SUCCESS;
 }
 
-Application::error_t Application::wait()
+bool Application::check() const
 {
-  if (_pid == -1)
+  if (_pid > 1 and kill(_pid, 0) == 0)
   {
-    Error << "wait() got an invalid pid_t";
-    return Application::INVALID;
+    return true;
   }
 
+  return false;
+}
+
+void Application::murder()
+{
+  if (check())
   {
-    ssize_t read_length;
-    char buffer[1024]= { 0 };
-    bool bail= false;
-    while (((read_length= ::read(stdout_fd.fd()[0], buffer, sizeof(buffer))) != 0) or bail)
+    int count= 5;
+    while ((count--) > 0 and check())
     {
-      if (read_length == -1)
+      int kill_ret= kill(_pid, SIGTERM);
+      if (kill_ret == 0)
       {
-        switch(errno)
+        int status= 0;
+        pid_t waitpid_ret;
+        if ((waitpid_ret= waitpid(_pid, &status, WNOHANG)) == -1)
         {
-        case EAGAIN:
-          continue;
+          switch (errno)
+          {
+          case ECHILD:
+          case EINTR:
+            break;
+
+          default:
+            Error << "waitpid() failed after kill with error of " << strerror(errno);
+            break;
+          }
+        }
 
-        default:
-          Error << strerror(errno);
-          bail= true;
+        if (waitpid_ret == 0)
+        {
+          libtest::dream(1, 0);
         }
       }
-      _stdout_buffer.reserve(read_length +1);
-      for (size_t x= 0; x < read_length; x++)
+      else
       {
-        _stdout_buffer.push_back(buffer[x]);
+        Error << "kill(pid, SIGTERM) failed after kill with error of " << strerror(errno);
+        continue;
       }
-      // @todo Suck up all output code here
+
+      break;
+    }
+
+    // If for whatever reason it lives, kill it hard
+    if (check())
+    {
+      (void)kill(_pid, SIGKILL);
     }
   }
+  slurp();
+}
 
+// false means that no data was returned
+bool Application::slurp()
+{
+  struct pollfd fds[2];
+  fds[0].fd= stdout_fd.fd();
+  fds[0].events= POLLRDNORM;
+  fds[0].revents= 0;
+  fds[1].fd= stderr_fd.fd();
+  fds[1].events= POLLRDNORM;
+  fds[1].revents= 0;
+
+  int active_fd;
+  if ((active_fd= poll(fds, 2, 0)) == -1)
   {
-    ssize_t read_length;
-    char buffer[1024]= { 0 };
-    bool bail= false;
-    while (((read_length= ::read(stderr_fd.fd()[0], buffer, sizeof(buffer))) != 0) or bail)
+    int error;
+    switch ((error= errno))
     {
-      if (read_length == -1)
-      {
-        switch(errno)
-        {
-        case EAGAIN:
-          continue;
+#ifdef TARGET_OS_LINUX
+    case ERESTART:
+#endif
+    case EINTR:
+      break;
 
-        default:
-          Error << strerror(errno);
-          bail= true;
-        }
-      }
-      _stderr_buffer.reserve(read_length +1);
-      for (size_t x= 0; x < read_length; x++)
-      {
-        _stderr_buffer.push_back(buffer[x]);
-      }
-      // @todo Suck up all errput code here
+    case EFAULT:
+    case ENOMEM:
+      fatal_message(strerror(error));
+      break;
+
+    case EINVAL:
+      fatal_message("RLIMIT_NOFILE exceeded, or if OSX the timeout value was invalid");
+      break;
+
+    default:
+      fatal_message(strerror(error));
+      break;
     }
+
+    return false;
+  }
+
+  if (active_fd == 0)
+  {
+    return false;
   }
 
+  bool data_was_read= false;
+  if (fds[0].revents & POLLRDNORM)
+  {
+    if (stdout_fd.read(_stdout_buffer) == true)
+    {
+      data_was_read= true;
+    }
+  }
+
+  if (fds[1].revents & POLLRDNORM)
+  {
+    if (stderr_fd.read(_stderr_buffer) == true)
+    {
+      data_was_read= true;
+    }
+  }
+
+  return data_was_read;
+}
+
+Application::error_t Application::wait(bool nohang)
+{
+  if (_pid == -1)
+  {
+    return Application::INVALID;
+  }
+
+  slurp();
+
   error_t exit_code= FAILURE;
   {
     int status= 0;
     pid_t waited_pid;
-    if ((waited_pid= waitpid(_pid, &status, 0)) == -1)
+    if ((waited_pid= waitpid(_pid, &status, nohang ? WNOHANG : 0)) == -1)
+    {
+      switch (errno)
+      {
+      case ECHILD:
+        exit_code= Application::SUCCESS;
+        break;
+
+      case EINTR:
+        break;
+
+      default:
+        Error << "Error occured while waitpid(" << strerror(errno) << ") on pid " << int(_pid);
+        break;
+      }
+    }
+    else if (waited_pid == 0)
     {
-      Error << "Error occured while waitpid(" << strerror(errno) << ") on pid " << int(_pid);
+      exit_code= Application::SUCCESS;
     }
     else
     {
@@ -319,6 +420,8 @@ Application::error_t Application::wait()
     }
   }
 
+  slurp();
+
 #if 0
   if (exit_code == Application::INVALID)
   {
@@ -329,6 +432,13 @@ Application::error_t Application::wait()
   return exit_code;
 }
 
+void Application::add_long_option(const std::string& name, const std::string& option_value)
+{
+  std::string arg(name);
+  arg+= option_value;
+  _options.push_back(std::make_pair(arg, std::string()));
+}
+
 void Application::add_option(const std::string& arg)
 {
   _options.push_back(std::make_pair(arg, std::string()));
@@ -339,12 +449,81 @@ void Application::add_option(const std::string& name, const std::string& value)
   _options.push_back(std::make_pair(name, value));
 }
 
-Application::Pipe::Pipe()
+Application::Pipe::Pipe(int arg) :
+  _std_fd(arg)
+{
+  _pipe_fd[READ]= -1;
+  _pipe_fd[WRITE]= -1;
+  _open[READ]= false;
+  _open[WRITE]= false;
+}
+
+int Application::Pipe::Pipe::fd()
 {
-  _fd[0]= -1;
-  _fd[1]= -1;
-  _open[0]= false;
-  _open[1]= false;
+  if (_std_fd == STDOUT_FILENO)
+  {
+    return _pipe_fd[READ];
+  }
+  else if (_std_fd == STDERR_FILENO)
+  {
+    return _pipe_fd[READ];
+  }
+
+  return _pipe_fd[WRITE]; // STDIN_FILENO
+}
+
+
+bool Application::Pipe::read(libtest::vchar_t& arg)
+{
+  fatal_assert(_std_fd == STDOUT_FILENO or _std_fd == STDERR_FILENO);
+
+  bool data_was_read= false;
+
+  ssize_t read_length;
+  char buffer[1024]= { 0 };
+  while ((read_length= ::read(_pipe_fd[READ], buffer, sizeof(buffer))))
+  {
+    if (read_length == -1)
+    {
+      switch(errno)
+      {
+      case EAGAIN:
+        break;
+
+      default:
+        Error << strerror(errno);
+        break;
+      }
+
+      break;
+    }
+
+    data_was_read= true;
+    arg.reserve(read_length +1);
+    for (size_t x= 0; x < read_length; x++)
+    {
+      arg.push_back(buffer[x]);
+    }
+    // @todo Suck up all errput code here
+  }
+
+  return data_was_read;
+}
+
+void Application::Pipe::nonblock()
+{
+  int ret;
+  if ((ret= fcntl(_pipe_fd[READ], F_GETFL, 0)) == -1)
+  {
+    Error << "fcntl(F_GETFL) " << strerror(errno);
+    throw strerror(errno);
+  }
+
+  if ((ret= fcntl(_pipe_fd[READ], F_SETFL, ret | O_NONBLOCK)) == -1)
+  {
+    Error << "fcntl(F_SETFL) " << strerror(errno);
+    throw strerror(errno);
+  }
 }
 
 void Application::Pipe::reset()
@@ -352,26 +531,37 @@ void Application::Pipe::reset()
   close(READ);
   close(WRITE);
 
-  int ret;
-  if (pipe(_fd) == -1)
+#if _GNU_SOURCE
+  if (pipe2(_pipe_fd, O_NONBLOCK) == -1)
+#else
+  if (pipe(_pipe_fd) == -1)
+#endif
   {
-    throw strerror(errno);
+    fatal_message(strerror(errno));
   }
   _open[0]= true;
   _open[1]= true;
 
+  if (true)
   {
-    if ((ret= fcntl(_fd[0], F_GETFL, 0)) == -1)
-    {
-      Error << "fcntl(F_GETFL) " << strerror(errno);
-      throw strerror(errno);
-    }
+    nonblock();
+    cloexec();
+  }
+}
 
-    if ((ret= fcntl(_fd[0], F_SETFL, ret | O_NONBLOCK)) == -1)
-    {
-      Error << "fcntl(F_SETFL) " << strerror(errno);
-      throw strerror(errno);
-    }
+void Application::Pipe::cloexec()
+{
+  int ret;
+  if ((ret= fcntl(_pipe_fd[WRITE], F_GETFD, 0)) == -1)
+  {
+    Error << "fcntl(F_GETFD) " << strerror(errno);
+    throw strerror(errno);
+  }
+
+  if ((ret= fcntl(_pipe_fd[WRITE], F_SETFD, ret | FD_CLOEXEC)) == -1)
+  {
+    Error << "fcntl(F_SETFD) " << strerror(errno);
+    throw strerror(errno);
   }
 }
 
@@ -381,21 +571,21 @@ Application::Pipe::~Pipe()
   close(WRITE);
 }
 
-void Application::Pipe::dup_for_spawn(const close_t& arg, posix_spawn_file_actions_t& file_actions, const int newfildes)
+void Application::Pipe::dup_for_spawn(const close_t& arg, posix_spawn_file_actions_t& file_actions)
 {
   int type= int(arg);
 
   int ret;
-  if ((ret= posix_spawn_file_actions_adddup2(&file_actions, _fd[type], newfildes )) < 0)
+  if ((ret= posix_spawn_file_actions_adddup2(&file_actions, _pipe_fd[type], _std_fd )) < 0)
   {
     Error << "posix_spawn_file_actions_adddup2(" << strerror(ret) << ")";
-    throw strerror(ret);
+    fatal_message(strerror(ret));
   }
 
-  if ((ret= posix_spawn_file_actions_addclose(&file_actions, _fd[type])) < 0)
+  if ((ret= posix_spawn_file_actions_addclose(&file_actions, _pipe_fd[type])) < 0)
   {
     Error << "posix_spawn_file_actions_adddup2(" << strerror(ret) << ")";
-    throw strerror(ret);
+    fatal_message(strerror(ret));
   }
 }
 
@@ -406,24 +596,27 @@ void Application::Pipe::close(const close_t& arg)
   if (_open[type])
   {
     int ret;
-    if (::close(_fd[type]) == -1)
+    if (::close(_pipe_fd[type]) == -1)
     {
       Error << "close(" << strerror(errno) << ")";
     }
     _open[type]= false;
-    _fd[type]= -1;
+    _pipe_fd[type]= -1;
   }
 }
 
 void Application::create_argv(const char *args[])
 {
-  _argc= 2 +_use_libtool ? 2 : 0; // +1 for the command, +2 for libtool/mode=execute, +1 for the NULL
+  delete_argv();
+  fatal_assert(_argc == 0);
 
   if (_use_libtool)
   {
     _argc+= 2; // +2 for libtool --mode=execute
   }
 
+  _argc+= 1; // For the command
+
   /*
     valgrind --error-exitcode=1 --leak-check=yes --show-reachable=yes --track-fds=yes --malloc-fill=A5 --free-fill=DE
   */
@@ -453,7 +646,8 @@ void Application::create_argv(const char *args[])
     }
   }
 
-  delete_argv();
+  _argc+= 1; // for the NULL
+
   built_argv= new char * [_argc];
 
   size_t x= 0;
@@ -500,7 +694,8 @@ void Application::create_argv(const char *args[])
       built_argv[x++]= strdup(*ptr);
     }
   }
-  built_argv[_argc -1]= NULL;
+  built_argv[x++]= NULL;
+  fatal_assert(x == _argc);
 }
 
 std::string Application::print()
@@ -551,7 +746,7 @@ int exec_cmdline(const std::string& command, const char *args[], bool use_libtoo
     return int(ret);
   }
 
-  return int(app.wait());
+  return int(app.wait(false));
 }
 
 const char *gearmand_binary() 
index f6da62bea260d02aeae9f1bdddff693cb09588c0..a387bcf5b5834583792b3e7a5f393b10ac387a45 100644 (file)
@@ -39,27 +39,28 @@ public:
 
   class Pipe {
   public:
-    Pipe();
+    Pipe(int);
     ~Pipe();
 
-    int* fd()
-    {
-      return _fd;
-    }
+    int fd();
 
     enum close_t {
-      READ,
-      WRITE
+      READ= 0,
+      WRITE= 1
     };
 
     void reset();
     void close(const close_t& arg);
     void dup_for_spawn(const close_t& arg,
-                       posix_spawn_file_actions_t& file_actions,
-                       const int newfildes);
+                       posix_spawn_file_actions_t& file_actions);
+
+    void nonblock();
+    void cloexec();
+    bool read(libtest::vchar_t&);
 
   private:
-    int _fd[2];
+    const int _std_fd;
+    int _pipe_fd[2];
     bool _open[2];
   };
 
@@ -70,8 +71,9 @@ public:
 
   void add_option(const std::string&);
   void add_option(const std::string&, const std::string&);
+  void add_long_option(const std::string& option_name, const std::string& option_value);
   error_t run(const char *args[]= NULL);
-  error_t wait();
+  error_t wait(bool nohang= true);
 
   libtest::vchar_t stdout_result() const
   {
@@ -100,6 +102,11 @@ public:
     _use_valgrind= arg;
   }
 
+  bool check() const;
+
+  bool slurp();
+  void murder();
+
   void use_gdb(bool arg= true)
   {
     _use_gdb= arg;
@@ -112,6 +119,11 @@ public:
     return  _gdb_filename;
   }
 
+  pid_t pid() const
+  {
+    return _pid;
+  }
+
 private:
   void create_argv(const char *args[]);
   void delete_argv();
index 121df252c6cefa040dfce525f0f2795cc0462cf3..a4c3736da16f80d634d457790e9e0abd9c913617 100644 (file)
 
 namespace libtest {
 
-bool _in_valgrind(const char*, int, const char*)
+bool valgrind_is_caller(void)
 {
   if (bool(getenv("TESTS_ENVIRONMENT")) and strstr(getenv("TESTS_ENVIRONMENT"), "valgrind"))
   {
     return true;
   }
 
-  return TEST_SUCCESS;
+  return false;
+}
+
+bool gdb_is_caller(void)
+{
+  if (bool(getenv("TESTS_ENVIRONMENT")) and strstr(getenv("TESTS_ENVIRONMENT"), "gdb"))
+  {
+    return true;
+  }
+
+  return false;
+}
+
+bool helgrind_is_caller(void)
+{
+  if (bool(getenv("TESTS_ENVIRONMENT")) and strstr(getenv("TESTS_ENVIRONMENT"), "helgrind"))
+  {
+    return true;
+  }
+
+  return false;
+}
+
+bool _in_valgrind(const char*, int, const char*)
+{
+  if (valgrind_is_caller())
+  {
+    return true;
+  }
+
+  return false;
 }
 
 } // namespace libtest
index 98ea1c8b68f4620ba9a91e250b8351d595c66cb1..4c80998253958d43f20c015ea275f1a9222a65a7 100644 (file)
 
 namespace libtest {
 
+LIBTEST_API
+bool gdb_is_caller(void);
+
+LIBTEST_API
+bool valgrind_is_caller(void);
+
+LIBTEST_API
 bool _in_valgrind(const char *file, int line, const char *func);
 
 template <class T_comparable, class T_hint>
index fac66616eae4a45b3cb663af28299f0242889ddd..e375e79401356a77ef117f9a65ed1e53a1e6ba1f 100644 (file)
@@ -27,6 +27,9 @@ namespace libtest {
 
 void create_core(void)
 {
+#ifdef TARGET_OS_OSX 
+  return;
+#endif
   if (getenv("LIBMEMCACHED_NO_COREDUMP") == NULL)
   {
     pid_t pid= fork();
index 23f47bd9d65b9decad8286ee03ad864160a0be98..c1c2b6838fbf929d6d0826e569c857fc8455629b 100644 (file)
@@ -55,5 +55,5 @@ private:
 
 } // namespace libtest
 
-#define fatal_message(__mesg) libtest::fatal(LIBYATL_DEFAULT_PARAM, __mesg)
-#define fatal_assert(__assert) if((__assert)) {} else { libtest::fatal(LIBYATL_DEFAULT_PARAM, #__assert); }
+#define fatal_message(__mesg) throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "%s", __mesg)
+#define fatal_assert(__assert) if((__assert)) {} else { throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "%s", #__assert); }
index a9730a0e95d86294a7d20fd565f95dababf7fd3a..969186642cbdaac4b07a5a1956c16307e59e0e14 100644 (file)
@@ -120,7 +120,13 @@ test_return_t Framework::Item::startup(void* arg)
 
 libtest::Runner *Framework::runner()
 {
-  return _runner ? _runner : &defualt_runners;
+  if (_runner == NULL)
+  {
+    _runner= &defualt_runners;
+  }
+  _runner->set_servers(_servers);
+
+  return _runner;
 }
 
 void* Framework::create(test_return_t& arg)
index c5ca7a1bf7da945f2ccfcc634de785e309c958c0..c7341a725848e3ad98a0c9da86f527a11e65276c 100644 (file)
@@ -179,4 +179,5 @@ private:
   libtest::server_startup_st _servers;
   bool _socket;
   void *_creators_ptr;
+  unsigned long int _servers_to_run;
 };
index 85307fcf0825b60a056fc41c46ba47d72fb2a77d..177de120a1bb74bea1806c7b6a88b29fe1a49796 100644 (file)
@@ -90,38 +90,11 @@ class Gearmand : public libtest::Server
 private:
 public:
   Gearmand(const std::string& host_arg, in_port_t port_arg) :
-    libtest::Server(host_arg, port_arg)
+    libtest::Server(host_arg, port_arg, GEARMAND_BINARY, true)
   {
     set_pid_file();
   }
 
-  pid_t get_pid(bool error_is_ok)
-  {
-    if (pid_file().empty() == false)
-    {
-      Wait wait(pid_file(), 0);
-
-      if (error_is_ok and not wait.successful())
-      {
-        Error << "Pidfile was not found:" << pid_file();
-        return -1;
-      }
-    }
-
-    GetPid *get_instance_pid;
-    util::Instance instance(hostname(), port());
-    instance.set_finish(get_instance_pid= new GetPid);
-
-    instance.push(new util::Operation(test_literal_param("getpid\r\n"), true));
-
-    if (error_is_ok and instance.run() == false)
-    {
-      Error << "Failed to obtain pid of server";
-    }
-
-    return get_instance_pid->pid();
-  }
-
   bool ping()
   {
     gearman_client_st *client= gearman_client_create(NULL);
@@ -160,16 +133,6 @@ public:
     return "gearmand";
   };
 
-  const char *executable()
-  {
-    return GEARMAND_BINARY;
-  }
-
-  const char *daemon_file_option()
-  {
-    return "--daemon";
-  }
-
   void log_file_option(Application& app, const std::string& arg)
   {
     if (arg.empty() == false)
index ce523a7afc134d208c39d509fb8831e81a95d0a2..ffb21c9d504154f3a47af9e4008e91c9fbecfe6c 100644 (file)
@@ -50,6 +50,18 @@ using namespace libtest;
 
 using namespace libtest;
 
+namespace {
+  bool is_memcached_libtool()
+  {
+    if (MEMCACHED_BINARY and strcmp(MEMCACHED_BINARY, "memcached/memcached") == 0) 
+    {
+      return true;
+    }
+
+    return false;
+  }
+}
+
 class Memcached : public libtest::Server
 {
   std::string _username;
@@ -61,13 +73,15 @@ public:
             const bool is_socket_arg,
             const std::string& username_arg,
             const std::string& password_arg) :
-    libtest::Server(host_arg, port_arg, is_socket_arg),
+    libtest::Server(host_arg, port_arg, 
+                    MEMCACHED_BINARY, is_memcached_libtool(), is_socket_arg),
     _username(username_arg),
     _password(password_arg)
   { }
 
   Memcached(const std::string& host_arg, const in_port_t port_arg, const bool is_socket_arg) :
-    libtest::Server(host_arg, port_arg, is_socket_arg)
+    libtest::Server(host_arg, port_arg,
+                    MEMCACHED_BINARY, is_memcached_libtool(), is_socket_arg)
   {
     set_pid_file();
   }
@@ -87,54 +101,26 @@ public:
     return _username;
   }
 
-  pid_t get_pid(bool error_is_ok)
+  bool wait_for_pidfile() const
   {
-    // Memcached is slow to start, so we need to do this
-    if (pid_file().empty() == false)
-    {
-      if (error_is_ok and
-          wait_for_pidfile() == false)
-      {
-        Error << "Pidfile was not found:" << pid_file();
-        return -1;
-      }
-    }
-
-    pid_t local_pid;
-    memcached_return_t rc= MEMCACHED_SUCCESS;
-    if (has_socket())
-    {
-      if (socket().empty())
-      {
-        return -1;
-      }
+    Wait wait(pid(), 4);
 
-      local_pid= libmemcached_util_getpid(socket().c_str(), port(), &rc);
-    }
-    else
-    {
-      local_pid= libmemcached_util_getpid(hostname().c_str(), port(), &rc);
-    }
-
-    if (error_is_ok and ((memcached_failed(rc) or not is_pid_valid(local_pid))))
-    {
-      Error << "libmemcached_util_getpid(" << memcached_strerror(NULL, rc) << ") pid: " << local_pid << " for:" << *this;
-    }
-
-    return local_pid;
+    return wait.successful();
   }
 
   bool ping()
   {
+#if 0
     // Memcached is slow to start, so we need to do this
     if (pid_file().empty() == false)
     {
       if (wait_for_pidfile() == false)
       {
-        Error << "Pidfile was not found:" << pid_file();
+        Error << "Pidfile was not found:" << pid_file() << " :" << running();
         return -1;
       }
     }
+#endif
 
     memcached_return_t rc;
     bool ret;
@@ -168,12 +154,7 @@ public:
 
   bool is_libtool()
   {
-    if (MEMCACHED_BINARY and strcmp(MEMCACHED_BINARY, "memcached/memcached") == 0) 
-    {
-      return true;
-    }
-
-    return false;
+    return is_memcached_libtool();
   }
 
   virtual void pid_file_option(Application& app, const std::string& arg)
@@ -189,11 +170,6 @@ public:
     return "-s ";
   }
 
-  const char *daemon_file_option()
-  {
-    return "-d";
-  }
-
   virtual void port_option(Application& app, in_port_t arg)
   {
     char buffer[30];
@@ -237,43 +213,12 @@ class MemcachedLight : public libtest::Server
 {
 
 public:
-  MemcachedLight(const std::string& host_arg, const in_port_t port_arg):
-    libtest::Server(host_arg, port_arg)
+  MemcachedLight(const std::string& host_arg, const in_port_t port_arg) :
+    libtest::Server(host_arg, port_arg, MEMCACHED_LIGHT_BINARY, true)
   {
     set_pid_file();
   }
 
-  pid_t get_pid(bool error_is_ok)
-  {
-    // Memcached is slow to start, so we need to do this
-    if (pid_file().empty() == false)
-    {
-      if (error_is_ok and wait_for_pidfile() == false)
-      {
-        Error << "Pidfile was not found:" << pid_file();
-        return -1;
-      }
-    }
-
-    bool success= false;
-    std::stringstream error_message;
-    pid_t local_pid= get_pid_from_file(pid_file(), error_message);
-    if (local_pid > 0)
-    {
-      if (::kill(local_pid, 0) > 0)
-      {
-        success= true;
-      }
-    }
-
-    if (error_is_ok and ((success or not is_pid_valid(local_pid))))
-    {
-      Error << "kill(" << " pid: " << local_pid << " errno:" << strerror(errno) << " for:" << *this;
-    }
-
-    return local_pid;
-  }
-
   bool ping()
   {
     // Memcached is slow to start, so we need to do this
@@ -309,11 +254,6 @@ public:
     return MEMCACHED_LIGHT_BINARY;
   }
 
-  const char *daemon_file_option()
-  {
-    return "--daemon";
-  }
-
   virtual void port_option(Application& app, in_port_t arg)
   {
     char buffer[1024];
@@ -376,44 +316,12 @@ public:
     return MEMCACHED_SASL_BINARY;
   }
 
-  pid_t get_pid(bool error_is_ok)
-  {
-    // Memcached is slow to start, so we need to do this
-    if (pid_file().empty() == false)
-    {
-      if (error_is_ok and 
-          wait_for_pidfile() == false)
-      {
-        Error << "Pidfile was not found:" << pid_file();
-        return -1;
-      }
-    }
-
-    pid_t local_pid;
-    memcached_return_t rc;
-    if (has_socket())
-    {
-      local_pid= libmemcached_util_getpid2(socket().c_str(), 0, username().c_str(), password().c_str(), &rc);
-    }
-    else
-    {
-      local_pid= libmemcached_util_getpid2(hostname().c_str(), port(), username().c_str(), password().c_str(), &rc);
-    }
-
-    if (error_is_ok and ((memcached_failed(rc) or not is_pid_valid(local_pid))))
-    {
-      Error << "libmemcached_util_getpid2(" << memcached_strerror(NULL, rc) << ") username: " << username() << " password: " << password() << " pid: " << local_pid << " for:" << *this;
-    }
-
-    return local_pid;
-  }
-
   bool ping()
   {
     // Memcached is slow to start, so we need to do this
-    if (not pid_file().empty())
+    if (pid_file().empty() == false)
     {
-      if (not wait_for_pidfile())
+      if (wait_for_pidfile() == false)
       {
         Error << "Pidfile was not found:" << pid_file();
         return -1;
@@ -432,7 +340,7 @@ public:
       ret= libmemcached_util_ping2(hostname().c_str(), port(), username().c_str(), password().c_str(), &rc);
     }
 
-    if (memcached_failed(rc) or not ret)
+    if (memcached_failed(rc) or ret == false)
     {
       Error << "libmemcached_util_ping2(" << hostname() << ", " << port() << ", " << username() << ", " << password() << ") error: " << memcached_strerror(NULL, rc);
     }
index 2561343dd987a279f6b389d60d2a67d45223b69c..fefb6a6d394ada0c72b0c480b61b7b38c140a406 100644 (file)
@@ -117,7 +117,7 @@ in_port_t get_free_port()
   // We handle the case where if we max out retries, we still abort.
   if (ret_port <= 1024)
   {
-    throw fatal_message("No port could be found");
+    fatal_message("No port could be found");
   }
 
   return ret_port;
index 86b5fe07a31abaf17d6c8f237383cc2e3e11eec5..c38beb2790cf0682941d471c9fc10a7106d717b0 100644 (file)
@@ -3,4 +3,3 @@ set logging overwrite on
 set environment LIBTEST_IN_GDB=1
 run
 thread apply all bt
-quit
index 217e2697439b541ab5e6560e3d2cc3204f0a0bc6..ea42c26037cb4c283537cfa08bd2aa5331371cb7 100644 (file)
@@ -37,7 +37,20 @@ public:
 
   Runner();
 
+  void set_servers(libtest::server_startup_st& arg)
+  {
+    _servers= &arg;
+  }
+
+  bool check()
+  {
+    return _servers ? _servers->check() : true;
+  }
+
   virtual ~Runner() { }
+
+private:
+  libtest::server_startup_st* _servers;
 };
 
 } // namespace Runner
index 7591e8bfafe2863cc163a070e54e95a5b47eca18..3141eed9e94ccd6777faf2b4a45f2fcb8b914aae 100644 (file)
@@ -76,21 +76,26 @@ std::ostream& operator<<(std::ostream& output, const Server &arg)
 
 #define MAGIC_MEMORY 123570
 
-Server::Server(const std::string& host_arg, const in_port_t port_arg, bool is_socket_arg) :
+Server::Server(const std::string& host_arg, const in_port_t port_arg,
+               const std::string& executable, const bool _is_libtool,
+               bool is_socket_arg) :
   _magic(MAGIC_MEMORY),
   _is_socket(is_socket_arg),
-  _pid(-1),
   _port(port_arg),
-  _hostname(host_arg)
+  _hostname(host_arg),
+  _app(executable, _is_libtool)
 {
 }
 
 Server::~Server()
 {
-  if (has_pid() and not kill(_pid))
-  {
-    Error << "Unable to kill:" << *this;
-  }
+}
+
+bool Server::check()
+{
+  _app.slurp();
+  _app.check();
+  return true;
 }
 
 bool Server::validate()
@@ -104,13 +109,12 @@ bool Server::cycle()
   uint32_t limit= 3;
 
   // Try to ping, and kill the server #limit number of times
-  pid_t current_pid;
   while (--limit and 
-         is_pid_valid(current_pid= get_pid()))
+         is_pid_valid(_app.pid()))
   {
-    if (kill(current_pid))
+    if (kill())
     {
-      Log << "Killed existing server," << *this << " with pid:" << current_pid;
+      Log << "Killed existing server," << *this;
       dream(0, 50000);
       continue;
     }
@@ -119,7 +123,7 @@ bool Server::cycle()
   // For whatever reason we could not kill it, and we reached limit
   if (limit == 0)
   {
-    Error << "Reached limit, could not kill server pid:" << current_pid;
+    Error << "Reached limit, could not kill server";
     return false;
   }
 
@@ -133,55 +137,47 @@ bool Server::wait_for_pidfile() const
   return wait.successful();
 }
 
+bool Server::has_pid() const
+{
+  return (_app.pid() > 1);
+}
+
+
 bool Server::start()
 {
   // If we find that we already have a pid then kill it.
-  if (has_pid() and kill(_pid) == false)
-  {
-    Error << "Could not kill() existing server during start() pid:" << _pid;
-    return false;
-  }
-
-  if (has_pid() == false)
+  if (has_pid() == true)
   {
     fatal_message("has_pid() failed, programer error");
   }
 
-  Application app(executable(), is_libtool());
-
-  if (is_debug())
+  // This needs more work.
+#if 0
+  if (gdb_is_caller())
   {
-    app.use_gdb();
+    _app.use_gdb();
   }
-  else if (getenv("TESTS_ENVIRONMENT"))
+#endif
+
+  if (getenv("YATL_VALGRIND_SERVER"))
   {
-    if (strstr(getenv("TESTS_ENVIRONMENT"), "gdb"))
-    {
-      app.use_gdb();
-    }
+    _app.use_valgrind();
   }
-
-  if (args(app) == false)
+  else if (args(_app) == false)
   {
     Error << "Could not build command()";
     return false;
   }
 
   Application::error_t ret;
-  if (Application::SUCCESS !=  (ret= app.run()))
+  if (Application::SUCCESS !=  (ret= _app.run()))
   {
     Error << "Application::run() " << ret;
     return false;
   }
-  _running= app.print();
-
-  if (Application::SUCCESS !=  (ret= app.wait()))
-  {
-    Error << "Application::wait() " << _running << " " << ret;
-    return false;
-  }
+  _running= _app.print();
 
-  if (is_valgrind())
+  if (valgrind_is_caller())
   {
     dream(5, 50000);
   }
@@ -192,17 +188,17 @@ bool Server::start()
 
     if (wait.successful() == false)
     {
-      libtest::fatal(LIBYATL_DEFAULT_PARAM,
-                     "Unable to open pidfile for: %s",
-                     _running.c_str());
+      throw libtest::fatal(LIBYATL_DEFAULT_PARAM,
+                           "Unable to open pidfile for: %s",
+                           _running.c_str());
     }
   }
 
+  uint32_t this_wait;
   bool pinged= false;
   {
     uint32_t timeout= 20; // This number should be high enough for valgrind startup (which is slow)
     uint32_t waited;
-    uint32_t this_wait;
     uint32_t retry;
 
     for (waited= 0, retry= 1; ; retry++, waited+= this_wait)
@@ -228,9 +224,11 @@ bool Server::start()
     {
       if (kill_file(pid_file()) == false)
       {
-        fatal_message("Failed to kill off server after startup occurred, when pinging failed");
+        throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "Failed to kill off server after startup occurred, when pinging failed: %s", pid_file().c_str());
       }
-      Error << "Failed to ping() server started, having pid_file. exec:" << _running;
+      Error << "Failed to ping(), waited:" << this_wait 
+        << " server started, having pid_file. exec:" << _running 
+        << " error:" << _app.stderr_result();
     }
     else
     {
@@ -240,9 +238,6 @@ bool Server::start()
     return false;
   }
 
-  // A failing get_pid() at this point is considered an error
-  _pid= get_pid(true);
-
   return has_pid();
 }
 
@@ -250,12 +245,11 @@ void Server::reset_pid()
 {
   _running.clear();
   _pid_file.clear();
-  _pid= -1;
 }
 
-pid_t Server::pid()
+pid_t Server::pid() const
 {
-  return _pid;
+  return _app.pid();
 }
 
 void Server::add_option(const std::string& arg)
@@ -333,7 +327,7 @@ bool Server::set_log_file()
   int fd;
   if ((fd= mkstemp(file_buffer)) == -1)
   {
-    libtest::fatal(LIBYATL_DEFAULT_PARAM, "mkstemp() failed on %s with %s", file_buffer, strerror(errno));
+    throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "mkstemp() failed on %s with %s", file_buffer, strerror(errno));
   }
   close(fd);
 
@@ -346,7 +340,7 @@ bool Server::args(Application& app)
 {
 
   // Set a log file if it was requested (and we can)
-  if (has_log_file_option())
+  if (false and has_log_file_option())
   {
     set_log_file();
     log_file_option(app, _log_file);
@@ -367,12 +361,6 @@ bool Server::args(Application& app)
     pid_file_option(app, pid_file());
   }
 
-  assert(daemon_file_option());
-  if (daemon_file_option() and not is_valgrind() and not is_helgrind())
-  {
-    app.add_option(daemon_file_option());
-  }
-
   if (has_socket_file_option())
   {
     if (set_socket_file() == false)
@@ -403,25 +391,11 @@ bool Server::args(Application& app)
   return true;
 }
 
-bool Server::is_debug() const
-{
-  return bool(getenv("LIBTEST_MANUAL_GDB"));
-}
-
-bool Server::is_valgrind() const
-{
-  return bool(getenv("LIBTEST_MANUAL_VALGRIND"));
-}
-
-bool Server::is_helgrind() const
-{
-  return bool(getenv("LIBTEST_MANUAL_HELGRIND"));
-}
-
-bool Server::kill(pid_t pid_arg)
+bool Server::kill()
 {
-  if (check_pid(pid_arg) and kill_pid(pid_arg)) // If we kill it, reset
+  if (check_pid(_app.pid())) // If we kill it, reset
   {
+    _app.murder();
     if (broken_pid_file() and pid_file().empty() == false)
     {
       unlink(pid_file().c_str());
index 1b6841d55d38d57541679d0af66305f9060df58a..b1ca30aa713f04e2d26eacd3fb955910dfeec541 100644 (file)
@@ -47,7 +47,6 @@ private:
   std::string _log_file;
   std::string _base_command; // executable command which include libtool, valgrind, gdb, etc
   std::string _running; // Current string being used for system()
-  pid_t _pid;
 
 protected:
   in_port_t _port;
@@ -55,13 +54,13 @@ protected:
   std::string _extra_args;
 
 public:
-  Server(const std::string& hostname, const in_port_t port_arg, const bool is_socket_arg= false);
+  Server(const std::string& hostname, const in_port_t port_arg,
+         const std::string& executable, const bool _is_libtool,
+         const bool is_socket_arg= false);
 
   virtual ~Server();
 
   virtual const char *name()= 0;
-  virtual const char *executable()= 0;
-  virtual const char *daemon_file_option()= 0;
   virtual bool is_libtool()= 0;
 
   virtual bool has_socket_file_option() const
@@ -163,8 +162,6 @@ public:
 
   virtual bool ping()= 0;
 
-  virtual pid_t get_pid(bool error_is_ok= false)= 0;
-
   virtual bool build(size_t argc, const char *argv[])= 0;
 
   void add_option(const std::string&);
@@ -188,26 +185,17 @@ public:
   // Reset a server if another process has killed the server
   void reset()
   {
-    _pid= -1;
     _pid_file.clear();
     _log_file.clear();
   }
 
   bool args(Application&);
 
-  pid_t pid();
+  pid_t pid() const;
 
-  pid_t pid() const
-  {
-    return _pid;
-  }
+  bool has_pid() const;
 
-  bool has_pid() const
-  {
-    return (_pid > 1);
-  }
-
-  bool wait_for_pidfile() const;
+  virtual bool wait_for_pidfile() const;
 
   bool check_pid(pid_t pid_arg) const
   {
@@ -224,9 +212,11 @@ public:
     return _running;
   }
 
+  bool check();
+
   std::string log_and_pid();
 
-  bool kill(pid_t pid_arg);
+  bool kill();
   bool start();
   bool command(libtest::Application& app);
 
@@ -235,6 +225,7 @@ public:
 protected:
   bool set_pid_file();
   Options _options;
+  Application _app;
 
 private:
   bool is_helgrind() const;
index 579f901c0694c855237f78332496cd0849f5454a..8203de9d5b46854268d7fd5f8695fa8db8db24bc 100644 (file)
@@ -82,7 +82,7 @@ bool server_startup_st::shutdown(uint32_t number_of_host)
   {
     Server* tmp= servers[number_of_host];
 
-    if (tmp and tmp->has_pid() and not tmp->kill(tmp->pid()))
+    if (tmp and tmp->has_pid() and tmp->kill() == false)
     { }
     else
     {
@@ -102,15 +102,33 @@ void server_startup_st::shutdown_and_remove()
   servers.clear();
 }
 
-void server_startup_st::shutdown()
+bool server_startup_st::check() const
 {
+  bool success= true;
+  for (std::vector<Server *>::const_iterator iter= servers.begin(); iter != servers.end(); iter++)
+  {
+    if ((*iter)->check()  == false)
+    {
+      success= false;
+    }
+  }
+
+  return success;
+}
+
+bool server_startup_st::shutdown()
+{
+  bool success= true;
   for (std::vector<Server *>::iterator iter= servers.begin(); iter != servers.end(); iter++)
   {
-    if ((*iter)->has_pid() and not (*iter)->kill((*iter)->pid()))
+    if ((*iter)->has_pid() and (*iter)->kill() == false)
     {
       Error << "Unable to kill:" <<  *(*iter);
+      success= false;
     }
   }
+
+  return success;
 }
 
 void server_startup_st::restart()
@@ -126,8 +144,9 @@ server_startup_st::server_startup_st() :
   _magic(MAGIC_MEMORY),
   _socket(false),
   _sasl(false),
-  _count(5),
-  udp(0)
+  _count(0),
+  udp(0),
+  _servers_to_run(5)
 { }
 
 server_startup_st::~server_startup_st()
@@ -140,29 +159,11 @@ bool server_startup_st::validate()
   return _magic == MAGIC_MEMORY;
 }
 
-
-bool server_startup_st::is_debug() const
+bool server_startup(server_startup_st& construct, const std::string& server_type, in_port_t try_port, int argc, const char *argv[], const bool opt_startup_message)
 {
-  return bool(getenv("LIBTEST_MANUAL_GDB"));
-}
-
-bool server_startup_st::is_valgrind() const
-{
-  return bool(getenv("LIBTEST_MANUAL_VALGRIND"));
-}
-
-bool server_startup_st::is_helgrind() const
-{
-  return bool(getenv("LIBTEST_MANUAL_HELGRIND"));
-}
-
-
-bool server_startup(server_startup_st& construct, const std::string& server_type, in_port_t try_port, int argc, const char *argv[])
-{
-  Outn();
   if (try_port <= 0)
   {
-    libtest::fatal(LIBYATL_DEFAULT_PARAM, "was passed the invalid port number %d", int(try_port));
+    throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "was passed the invalid port number %d", int(try_port));
   }
 
   libtest::Server *server= NULL;
@@ -239,7 +240,7 @@ bool server_startup(server_startup_st& construct, const std::string& server_type
 
   server->build(argc, argv);
 
-  if (construct.is_debug())
+  if (gdb_is_caller() and false)
   {
     Out << "Pausing for startup, hit return when ready.";
     std::string gdb_command= server->base_command();
@@ -256,13 +257,16 @@ bool server_startup(server_startup_st& construct, const std::string& server_type
   }
   else
   {
-    Out << "STARTING SERVER(pid:" << server->pid() << "): " << server->running();
+    if (opt_startup_message)
+    {
+      Outn();
+      Out << "STARTING SERVER(pid:" << server->pid() << "): " << server->running();
+      Outn();
+    }
   }
 
   construct.push_server(server);
 
-  Outn();
-
   return true;
 }
 
@@ -337,7 +341,7 @@ bool server_startup_st::start_socket_server(const std::string& server_type, cons
 
   server->build(argc, argv);
 
-  if (is_debug())
+  if (gdb_is_caller() and false)
   {
     Out << "Pausing for startup, hit return when ready.";
     std::string gdb_command= server->base_command();
@@ -347,7 +351,7 @@ bool server_startup_st::start_socket_server(const std::string& server_type, cons
 #endif
     getchar();
   }
-  else if (not server->start())
+  else if (server->start() == false)
   {
     Error << "Failed to start " << *server;
     delete server;
index 29ecb97d689ecbaf34beae6bbd71b56c1375e865..c65065aa1eb53113844b5d1330f8f22f901f4229 100644 (file)
@@ -57,12 +57,7 @@ public:
 
   uint32_t count() const
   {
-    return _count;
-  }
-
-  void set_count(uint32_t arg)
-  {
-    _count= arg;
+    return servers.size();
   }
 
   void restart();
@@ -79,11 +74,6 @@ public:
     return _username;
   }
 
-
-  bool is_debug() const;
-  bool is_helgrind() const;
-  bool is_valgrind() const;
-
   bool socket()
   {
     return _socket;
@@ -108,13 +98,28 @@ public:
 
 
   void shutdown_and_remove();
-  void shutdown();
+  bool shutdown();
   bool shutdown(uint32_t number_of_host);
 
+  bool check() const;
+
   void push_server(Server *);
   Server *pop_server();
+
+  unsigned long int servers_to_run() const
+  {
+    return _servers_to_run;
+  }
+
+  void set_servers_to_run(unsigned long int arg)
+  {
+    _servers_to_run= arg;
+  }
+
+private:
+  unsigned long int _servers_to_run;
 };
 
-bool server_startup(server_startup_st&, const std::string&, in_port_t try_port, int argc, const char *argv[]);
+bool server_startup(server_startup_st&, const std::string&, in_port_t try_port, int argc, const char *argv[], const bool opt_startup_message= true);
 
 } // namespace libtest
index bc9da4bc33b7eebefd705bf43a0f508657848be8..04d06b3642752a5db31bd38f52a5519c60bc2140 100644 (file)
@@ -75,7 +75,7 @@ void SignalThread::post()
 void SignalThread::test()
 {
   assert(magic_memory == MAGIC_MEMORY);
-  if (not getenv("LIBTEST_IN_GDB"))
+  if (bool(getenv("LIBTEST_IN_GDB")) == false)
   {
     assert(sigismember(&set, SIGABRT));
     assert(sigismember(&set, SIGQUIT));
@@ -86,7 +86,7 @@ void SignalThread::test()
 
 SignalThread::~SignalThread()
 {
-  if (not is_shutdown())
+  if (is_shutdown() == false)
   {
     set_shutdown(SHUTDOWN_GRACEFUL);
   }
@@ -143,6 +143,10 @@ static void *sig_thread(void *arg)
       }
       break;
 
+    case 0:
+      Error << "Inside of gdb";
+      break;
+
     default:
       Error << "Signal handling thread got unexpected signal " <<  strsignal(sig);
       break;
@@ -160,7 +164,7 @@ SignalThread::SignalThread() :
 {
   pthread_mutex_init(&shutdown_mutex, NULL);
   sigemptyset(&set);
-  if (not getenv("LIBTEST_IN_GDB"))
+  if (bool(getenv("LIBTEST_IN_GDB")) == false)
   {
     sigaddset(&set, SIGABRT);
     sigaddset(&set, SIGQUIT);
index 0739d625f12d469ba7ffc34ea69a5ba0c3182aa4..e37b88aeaafcb9072e8f4be12bf7e7c457a6bf4e 100644 (file)
@@ -37,7 +37,7 @@ const char *test_strerror(test_return_t code)
     return "skipped";
   }
 
-  throw fatal_message("No port could be found");
+  fatal_message("No port could be found");
 }
 
 } // namespace libtest
index cafc48d4e45cfa9f2b41963ce73d3da0d15dab9b..11222b2c08d11c9d362aff1a9e2c52ed7282be6f 100644 (file)
@@ -76,7 +76,9 @@ static long int timedif(struct timeval a, struct timeval b)
 
 int main(int argc, char *argv[])
 {
-  bool opt_repeat= false;
+  bool opt_massive= false;
+  unsigned long int opt_repeat= 1; // Run all tests once
+  bool opt_quiet= false;
   std::string collection_to_run;
 
   // Options parsing
@@ -84,14 +86,19 @@ int main(int argc, char *argv[])
     enum long_option_t {
       OPT_LIBYATL_VERSION,
       OPT_LIBYATL_MATCH_COLLECTION,
+      OPT_LIBYATL_MASSIVE,
+      OPT_LIBYATL_QUIET,
       OPT_LIBYATL_REPEAT
     };
 
     static struct option long_options[]=
     {
-      {"repeat", no_argument, NULL, OPT_LIBYATL_REPEAT},
-      {"collection", required_argument, NULL, OPT_LIBYATL_MATCH_COLLECTION},
-      {0, 0, 0, 0}
+      { "version", no_argument, NULL, OPT_LIBYATL_VERSION },
+      { "quiet", no_argument, NULL, OPT_LIBYATL_QUIET },
+      { "repeat", no_argument, NULL, OPT_LIBYATL_REPEAT },
+      { "collection", required_argument, NULL, OPT_LIBYATL_MATCH_COLLECTION },
+      { "massive", no_argument, NULL, OPT_LIBYATL_MASSIVE },
+      { 0, 0, 0, 0 }
     };
 
     int option_index= 0;
@@ -108,14 +115,22 @@ int main(int argc, char *argv[])
       case OPT_LIBYATL_VERSION:
         break;
 
+      case OPT_LIBYATL_QUIET:
+        opt_quiet= true;
+        break;
+
       case OPT_LIBYATL_REPEAT:
-        opt_repeat= true;
+        opt_repeat= strtoul(optarg, (char **) NULL, 10);
         break;
 
       case OPT_LIBYATL_MATCH_COLLECTION:
         collection_to_run= optarg;
         break;
 
+      case OPT_LIBYATL_MASSIVE:
+        opt_massive= true;
+        break;
+
       case '?':
         /* getopt_long already printed an error message. */
         Error << "unknown option to getopt_long()";
@@ -129,11 +144,26 @@ int main(int argc, char *argv[])
 
   srandom((unsigned int)time(NULL));
 
-  if (getenv("LIBTEST_QUIET") and strcmp(getenv("LIBTEST_QUIET"), "0") == 0)
+  if (bool(getenv("YATL_REPEAT")) and (strtoul(getenv("YATL_REPEAT"), (char **) NULL, 10) > 1))
   {
-    close(STDOUT_FILENO);
+    opt_repeat= strtoul(getenv("YATL_REPEAT"), (char **) NULL, 10);
+  }
+
+  if ((bool(getenv("YATL_QUIET")) and (strcmp(getenv("YATL_QUIET"), "0") == 0)) or opt_quiet)
+  {
+    opt_quiet= true;
   }
   else if (getenv("JENKINS_URL"))
+  {
+    if (bool(getenv("YATL_QUIET")) and (strcmp(getenv("YATL_QUIET"), "1") == 0))
+    { }
+    else
+    {
+      opt_quiet= true;
+    }
+  }
+
+  if (opt_quiet)
   {
     close(STDOUT_FILENO);
   }
@@ -173,7 +203,7 @@ int main(int argc, char *argv[])
       fatal_assert(sigignore(SIGPIPE) == 0);
 
       libtest::SignalThread signal;
-      if (not signal.setup())
+      if (signal.setup() == false)
       {
         Error << "Failed to setup signals";
         return EXIT_FAILURE;
@@ -254,7 +284,7 @@ int main(int argc, char *argv[])
           goto cleanup;
 
         default:
-          throw fatal_message("invalid return code");
+          fatal_message("invalid return code");
         }
 
         Out << "Collection: " << next->name;
@@ -326,6 +356,11 @@ int main(int argc, char *argv[])
             }
           }
 
+          catch (libtest::fatal &e)
+          {
+            Error << "Fatal exception was thrown: " << e.what();
+            return_code= TEST_FAILURE;
+          }
           catch (std::exception &e)
           {
             Error << "Exception was thrown: " << e.what();
@@ -359,7 +394,7 @@ int main(int argc, char *argv[])
             break;
 
           default:
-            throw fatal_message("invalid return code");
+            fatal_message("invalid return code");
           }
 
           if (test_failed(world.on_error(return_code, creators_ptr)))
@@ -420,7 +455,7 @@ cleanup:
       stats_print(&stats);
 
       Outn(); // Generate a blank to break up the messages if make check/test has been run
-    } while (exit_code == EXIT_SUCCESS and opt_repeat);
+    } while (exit_code == EXIT_SUCCESS and --opt_repeat);
   }
   catch (libtest::fatal& e)
   {
index 1bbacda3f8ab77ac071888cfb2968175cea60ce4..b7cb5f5e8b9c73b4de4fd97955d02252af158889 100644 (file)
@@ -35,7 +35,7 @@ std::string create_tmpfile(const std::string& name)
   int fd;
   if ((fd= mkstemp(file_buffer)) == -1)
   {
-    libtest::fatal(LIBYATL_DEFAULT_PARAM, "mkstemp() failed on %s with %s", file_buffer, strerror(errno));
+    throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "mkstemp() failed on %s with %s", file_buffer, strerror(errno));
   }
   close(fd);
   unlink(file_buffer);
index a5860bdd35b4790a1ec1349f19d30cbd1bc80bd4..87f69acb1c5d35102a615d5401b4872c0c10c33b 100644 (file)
@@ -381,17 +381,16 @@ static test_return_t application_true_fubar_BINARY(void *)
 
 static test_return_t application_doesnotexist_BINARY(void *)
 {
-  test_skip_valgrind();
 
+  test_skip_valgrind();
   Application true_app("doesnotexist");
 
   const char *args[]= { "--fubar", 0 };
 #if defined(TARGET_OS_OSX) && TARGET_OS_OSX
   test_compare(Application::INVALID, true_app.run(args));
-  test_compare(Application::FAILURE, true_app.wait());
 #else
   test_compare(Application::SUCCESS, true_app.run(args));
-  test_compare(Application::INVALID, true_app.wait());
+  test_compare(Application::INVALID, true_app.wait(false));
 #endif
 
   test_compare(0, true_app.stdout_result().size());
@@ -472,6 +471,8 @@ static test_return_t application_echo_fubar_BINARY(void *)
   test_compare(Application::SUCCESS, true_app.run(args));
   test_compare(Application::SUCCESS, true_app.wait());
 
+  while (true_app.slurp() == false) {} ;
+
   libtest::vchar_t response;
   make_vector(response, test_literal_param("fubar\n"));
   test_compare(response, true_app.stdout_result());
@@ -486,7 +487,8 @@ static test_return_t application_echo_fubar_BINARY2(void *)
   true_app.add_option("fubar");
 
   test_compare(Application::SUCCESS, true_app.run());
-  test_compare(Application::SUCCESS, true_app.wait());
+  test_compare(Application::SUCCESS, true_app.wait(false));
+
   libtest::vchar_t response;
   make_vector(response, test_literal_param("fubar\n"));
   test_compare(response, true_app.stdout_result());
@@ -616,6 +618,7 @@ static test_return_t gdb_abort_services_appliction_TEST(void *)
   test_compare(Application::SUCCESS, abort_app.wait());
 
   std::string gdb_filename= abort_app.gdb_filename();
+  test_skip(0, access(gdb_filename.c_str(), R_OK ));
   const char *args[]= { "SIGABRT", gdb_filename.c_str(), 0 };
   test_compare(EXIT_SUCCESS, exec_cmdline("grep", args));
 
@@ -656,11 +659,13 @@ static test_return_t number_of_cpus_TEST(void *)
 static test_return_t create_tmpfile_TEST(void *)
 {
   std::string tmp= create_tmpfile(__func__);
+  test_compare(-1, access(tmp.c_str(), R_OK));
+  test_compare(-1, access(tmp.c_str(), F_OK));
 
   Application touch_app("touch");
   const char *args[]= { tmp.c_str(), 0 };
   test_compare(Application::SUCCESS, touch_app.run(args));
-  test_compare(Application::SUCCESS, touch_app.wait());
+  test_compare(Application::SUCCESS, touch_app.wait(false));
 
   test_compare_hint(0, access(tmp.c_str(), R_OK), strerror(errno));
   test_compare_hint(0, unlink(tmp.c_str()), strerror(errno));
@@ -671,7 +676,7 @@ static test_return_t create_tmpfile_TEST(void *)
 static test_return_t fatal_message_TEST(void *)
 {
   test_compare(fatal_calls++, fatal::disabled_counter());
-  throw fatal_message("Fatal test");
+  fatal_message("Fatal test");
 
   return TEST_SUCCESS;
 }
@@ -852,6 +857,7 @@ collection_st collection[] ={
   {"cmdline", 0, 0, cmdline_tests},
   {"application", 0, 0, application_tests},
   {"http", check_for_curl, 0, http_tests},
+  {"http", check_for_curl, 0, http_tests},
   {"get_free_port()", 0, 0, get_free_port_TESTS },
   {"fatal", disable_fatal_exception, enable_fatal_exception, fatal_message_TESTS },
   {"number_of_cpus()", 0, 0, number_of_cpus_TESTS },
index c6c3f966d84a79fcbddd9f167cc515d8e3992be1..f81a29ad85e0762d5124af8908cf3c52a9207464 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <unistd.h>
 #include <string>
+#include <signal.h>
 
 #include <libtest/dream.h>
 
@@ -63,6 +64,30 @@ public:
     }
   }
 
+  Wait(const pid_t &_pid_arg, uint32_t timeout= 6) :
+    _successful(false)
+  {
+    uint32_t waited;
+    uint32_t this_wait;
+    uint32_t retry;
+
+    for (waited= 0, retry= 1; ; retry++, waited+= this_wait)
+    {
+      if (kill(_pid_arg, 0) == 0)
+      {
+        _successful= true;
+        break;
+      }
+      else if (waited >= timeout)
+      {
+        break;
+      }
+
+      this_wait= retry * retry / 3 + 1;
+      libtest::dream(this_wait, 0);
+    }
+  }
+
   bool successful() const
   {
     return _successful;
index 05154ed485dff0836719df4eb837deea327d8746..dcee0648e4bce1d094a8bffd3763593e8f14cfb0 100644 (file)
@@ -18,7 +18,7 @@ AC_DEFUN([PANDORA_OPTIMIZE],[
       ;;
     esac
 
-    AM_CPPFLAGS="-g ${AM_CPPFLAGS}"
+    AM_CPPFLAGS="-ggdb ${AM_CPPFLAGS}"
 
     DEBUG_CFLAGS="-O0"
     DEBUG_CXXFLAGS="-O0"
index 7d053cce8c943032a80f9766285c96bb2c4126a8..10e89f8051843ff05c73edf795347017839bf37d 100644 (file)
@@ -5278,8 +5278,10 @@ int main (int argc, char **argv) {
     stop_assoc_maintenance_thread();
 
     /* remove the PID file if we're a daemon */
+#if 0
     if (do_daemonize)
         remove_pidfile(pid_file);
+#endif
     /* Clean up strdup() call for bind() address */
     if (settings.inter)
       free(settings.inter);
index a762d00b54d71eb58f00cbb4e98dd1c4852d2c8c..ac087f4f2e6f47c28e24c426b4231ff02a63cf24 100644 (file)
@@ -1,6 +1,6 @@
 /*  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
  * 
- *  Libmemcached library
+ *  Cycle the Gearmand server
  *
  *  Copyright (C) 2011 Data Differential, http://datadifferential.com/
  *
 #include <config.h>
 #include <libtest/test.hpp>
 
+using namespace libtest;
 #include <libmemcached/memcached.h>
-#include <libmemcached/is.h>
-#include <libmemcached/util.h>
-
-#include <iostream>
-
 
-#include <libtest/server.h>
+static test_return_t server_startup_single_TEST(void *obj)
+{
+  server_startup_st *servers= (server_startup_st*)obj;
+  test_compare(true, server_startup(*servers, "memcached", libtest::get_free_port(), 0, NULL, false));
+  test_compare(true, servers->shutdown());
 
-using namespace libtest;
 
-#ifndef __INTEL_COMPILER
-#pragma GCC diagnostic ignored "-Wstrict-aliasing"
-#endif
+  return TEST_SUCCESS;
+}
 
-static test_return_t alive(memcached_st *memc)
+static test_return_t server_startup_multiple_TEST(void *obj)
 {
-  test_true(memc);
-  test_true(memcached_is_allocated(memc));
-  for (uint32_t x= 0; x < memcached_server_count(memc); ++x)
+  server_startup_st *servers= (server_startup_st*)obj;
+  for (size_t x= 0; x < 10; x++)
   {
-    memcached_server_instance_st instance= memcached_server_instance_by_position(memc, x);
-    test_true(instance);
-
-    test_true(libmemcached_util_ping(memcached_server_name(instance),
-                                     memcached_server_port(instance), NULL));
+    test_compare(true, server_startup(*servers, "memcached", libtest::get_free_port(), 0, NULL, false));
   }
+  test_compare(true, servers->shutdown());
 
   return TEST_SUCCESS;
 }
 
-static test_return_t valid(memcached_st *memc)
+static test_return_t shutdown_and_remove_TEST(void *obj)
 {
-  test_true(memc);
-  test_true(memcached_is_allocated(memc));
+  server_startup_st *servers= (server_startup_st*)obj;
+  servers->shutdown_and_remove();
 
-  for (uint32_t x= 0; x < memcached_server_count(memc); ++x)
-  {
-    memcached_server_instance_st instance= memcached_server_instance_by_position(memc, x);
-    test_true(instance);
+  return TEST_SUCCESS;
+}
 
-    pid_t pid= libmemcached_util_getpid(memcached_server_name(instance),
-                                        memcached_server_port(instance), NULL);
-    test_true(pid != -1);
-  }
+test_st server_startup_TESTS[] ={
+  {"server_startup(1)", false, (test_callback_fn*)server_startup_single_TEST },
+  {"server_startup(10)", false, (test_callback_fn*)server_startup_multiple_TEST },
+  {"shutdown_and_remove()", false, (test_callback_fn*)shutdown_and_remove_TEST },
+  {"server_startup(10)", false, (test_callback_fn*)server_startup_multiple_TEST },
+  {0, 0, 0}
+};
+
+#if 0
+static test_return_t collection_INIT(void *object)
+{
+  server_startup_st *servers= (server_startup_st*)object;
+  test_zero(servers->count());
+  test_compare(true, server_startup(*servers, "memcached", libtest::default_port(), 0, NULL));
 
   return TEST_SUCCESS;
 }
+#endif
 
-static test_return_t kill_test(memcached_st *)
+static test_return_t validate_sanity_INIT(void *object)
 {
-  static struct timespec global_sleep_value= { 2, 0 };
+  server_startup_st *servers= (server_startup_st*)object;
 
-#ifdef WIN32
-  sleep(1);
-#else
-  nanosleep(&global_sleep_value, NULL);
-#endif
+  test_zero(servers->count());
 
   return TEST_SUCCESS;
 }
 
-test_st ping_tests[] ={
-  {"alive", true, (test_callback_fn*)alive },
-  {0, 0, 0}
-};
-
-test_st getpid_tests[] ={
-  {"valid", true, (test_callback_fn*)valid },
-  {0, 0, 0}
-};
+static test_return_t collection_FINAL(void *object)
+{
+  server_startup_st *servers= (server_startup_st*)object;
+  servers->shutdown_and_remove();
 
-test_st kill_tests[] ={
-  {"kill", true, (test_callback_fn*)kill_test },
-  {0, 0, 0}
-};
+  return TEST_SUCCESS;
+}
 
 collection_st collection[] ={
-  {"libmemcached_util_ping()", 0, 0, ping_tests},
-  {"libmemcached_util_getpid()", 0, 0, getpid_tests},
-  {"kill", 0, 0, kill_tests},
+  {"server_startup()", validate_sanity_INIT, collection_FINAL, server_startup_TESTS },
   {0, 0, 0, 0}
 };
 
-
-#include "tests/libmemcached_world.h"
+static void *world_create(server_startup_st& servers, test_return_t& )
+{
+  return &servers;
+}
 
 void get_world(Framework *world)
 {
   world->collections= collection;
-
-  world->_create= (test_callback_create_fn*)world_create;
-  world->_destroy= (test_callback_destroy_fn*)world_destroy;
-
-  world->item.set_startup((test_callback_fn*)world_test_startup);
-  world->item.set_pre((test_callback_fn*)world_pre_run);
-  world->item.set_post((test_callback_fn*)world_post_run);
-
-  world->set_on_error((test_callback_error_fn*)world_on_error);
-
-  world->collection_startup= (test_callback_fn*)world_container_startup;
-  world->collection_shutdown= (test_callback_fn*)world_container_shutdown;
-
-  world->set_runner(&defualt_libmemcached_runner);
-  world->set_socket();
+  world->_create= world_create;
 }
 
index 699ef46cddd6b9385b1367ce274b38c6c125d487..ccc32f392babb256a574ee629e7d174d3069ff52 100644 (file)
@@ -63,6 +63,8 @@ Framework *global_framework= NULL;
 
 static test_return_t shutdown_servers(memcached_st *memc)
 {
+  test_skip_valgrind();
+
   test_compare(memcached_server_count(memc), 1U);
 
   // Disable a single server, just the first
@@ -73,6 +75,8 @@ static test_return_t shutdown_servers(memcached_st *memc)
 
 static test_return_t add_shutdown_servers(memcached_st *memc)
 {
+  test_skip_valgrind();
+
   while (memcached_server_count(memc) < 2)
   {
     const char *argv[1]= { "add_shutdown_server" };
@@ -207,7 +211,7 @@ collection_st collection[] ={
 
 void get_world(Framework *world)
 {
-  world->servers().set_count(1);
+  world->servers().set_servers_to_run(1);
 
   world->collections= collection;
 
index 7bc9e60b99dcddf2f338ada4accedcb3759239f4..56e7181674f3a7c7c9dc824b5aa355edb440aafe 100644 (file)
@@ -94,7 +94,7 @@ test-memcapable: tests/var tests/memcapable
 pahole-mem: tests/testapp
        @$(PAHOLE_COMMAND)  tests/testapp
 
-gdb-mem: tests/var tests/libmemcached-1.0/testapp
+gdb-mem: tests/libmemcached-1.0/testapp
        @$(DEBUG_COMMAND)  tests/libmemcached-1.0/testapp
 
 gdb-sasl: tests/sasl
index b8f93fb562b039b339a331695d9510502f58f603..789704b39a8328947559831b10f47487b3487188 100644 (file)
@@ -72,13 +72,13 @@ void get_world(Framework *world)
 {
   if (getenv("LIBMEMCACHED_SERVER_NUMBER"))
   {
-    int set_count= atoi(getenv("LIBMEMCACHED_SERVER_NUMBER"));
-    fatal_assert(set_count >= 0);
-    world->servers().set_count(set_count);
+    unsigned long int set_count= strtoul(getenv("LIBMEMCACHED_SERVER_NUMBER"), (char **) NULL, 10);
+    fatal_assert(set_count >= 1);
+    world->servers().set_servers_to_run(set_count);
   }
   else
   {
-    world->servers().set_count(8);
+    world->servers().set_servers_to_run(8);
   }
 
   world->collections= collection;
index 8a1951e66ac62cd47ed4377935b03c710632e1d4..9140e72106ee967804ed86fe1cde8d177cd336dd 100644 (file)
@@ -620,7 +620,7 @@ test_return_t set_test(memcached_st *memc)
                                        test_literal_param("foo"),
                                        test_literal_param("when we sanitize"),
                                        time_t(0), (uint32_t)0);
-  test_true_got(rc == MEMCACHED_SUCCESS or rc == MEMCACHED_BUFFERED, memcached_strerror(NULL, rc));
+  test_true_got(rc == MEMCACHED_SUCCESS or rc == MEMCACHED_BUFFERED, memcached_last_error_message(memc));
 
   return TEST_SUCCESS;
 }
@@ -715,11 +715,12 @@ test_return_t memcached_mget_mixed_memcached_get_TEST(memcached_st *memc)
        iter != keys.end(); 
        iter++)
   {
-    test_compare(MEMCACHED_SUCCESS,
-                 memcached_set(memc,
-                               (*iter), 36,
-                               NULL, 0,
-                               time_t(0), uint32_t(0)));
+    test_compare_hint(MEMCACHED_SUCCESS,
+                      memcached_set(memc,
+                                    (*iter), 36,
+                                    NULL, 0,
+                                    time_t(0), uint32_t(0)),
+                      memcached_last_error_message(memc));
   }
 
   for (ptrdiff_t loop= 0; loop < 20; loop++)
@@ -738,7 +739,7 @@ test_return_t memcached_mget_mixed_memcached_get_TEST(memcached_st *memc)
       {
         result_count++;
       }
-      test_compare(keys.size(), result_count);
+      test_true(keys.size() >= result_count);
     }
     else
     {
@@ -947,28 +948,31 @@ test_return_t add_wrapper(memcached_st *memc)
 
 test_return_t replace_test(memcached_st *memc)
 {
-  test_compare(return_value_based_on_buffering(memc),
-               memcached_set(memc,
-                             test_literal_param(__func__),
-                             test_literal_param("when we sanitize"),
-                             time_t(0), uint32_t(0)));
+  test_compare_hint(return_value_based_on_buffering(memc),
+                    memcached_set(memc,
+                                  test_literal_param(__func__),
+                                  test_literal_param("when we sanitize"),
+                                  time_t(0), uint32_t(0)),
+                    memcached_last_error_message(memc));
 
-  test_compare(MEMCACHED_SUCCESS,
-               memcached_replace(memc,
-                                 test_literal_param(__func__),
-                                 test_literal_param("first we insert some data"),
-                                 time_t(0), uint32_t(0)));
+  test_compare_hint(MEMCACHED_SUCCESS,
+                    memcached_replace(memc,
+                                      test_literal_param(__func__),
+                                      test_literal_param("first we insert some data"),
+                                      time_t(0), uint32_t(0)),
+                    memcached_last_error_message(memc));
 
   return TEST_SUCCESS;
 }
 
 test_return_t delete_test(memcached_st *memc)
 {
-  test_compare(return_value_based_on_buffering(memc), 
-               memcached_set(memc, 
-                             test_literal_param(__func__),
-                             test_literal_param("when we sanitize"),
-                             time_t(0), uint32_t(0)));
+  test_compare_hint(return_value_based_on_buffering(memc), 
+                    memcached_set(memc, 
+                                  test_literal_param(__func__),
+                                  test_literal_param("when we sanitize"),
+                                  time_t(0), uint32_t(0)),
+                    memcached_last_error_message(memc));
 
   test_compare_hint(return_value_based_on_buffering(memc),
                     memcached_delete(memc, 
@@ -1179,11 +1183,12 @@ test_return_t set_test2(memcached_st *memc)
 {
   for (uint32_t x= 0; x < 10; x++)
   {
-    test_compare(return_value_based_on_buffering(memc),
-                 memcached_set(memc,
-                               test_literal_param("foo"),
-                               test_literal_param("train in the brain"),
-                               time_t(0), uint32_t(0)));
+    test_compare_hint(return_value_based_on_buffering(memc),
+                      memcached_set(memc,
+                                    test_literal_param("foo"),
+                                    test_literal_param("train in the brain"),
+                                    time_t(0), uint32_t(0)),
+                      memcached_last_error_message(memc));
   }
 
   return TEST_SUCCESS;
@@ -1538,18 +1543,20 @@ test_return_t quit_test(memcached_st *memc)
 {
   const char *value= "sanford and sun";
 
-  test_compare(return_value_based_on_buffering(memc),
-               memcached_set(memc,
-                             test_literal_param(__func__),
-                             value, strlen(value),
-                             (time_t)10, (uint32_t)3));
+  test_compare_hint(return_value_based_on_buffering(memc),
+                    memcached_set(memc,
+                                  test_literal_param(__func__),
+                                  value, strlen(value),
+                                  (time_t)10, (uint32_t)3),
+                    memcached_last_error_message(memc));
   memcached_quit(memc);
 
-  test_compare(return_value_based_on_buffering(memc),
-               memcached_set(memc,
-                             test_literal_param(__func__),
-                             value, strlen(value),
-                             (time_t)50, (uint32_t)9));
+  test_compare_hint(return_value_based_on_buffering(memc),
+                    memcached_set(memc,
+                                  test_literal_param(__func__),
+                                  value, strlen(value),
+                                  (time_t)50, (uint32_t)9),
+                    memcached_last_error_message(memc));
 
   return TEST_SUCCESS;
 }
@@ -1762,7 +1769,7 @@ test_return_t mget_execute(memcached_st *original_memc)
                                          blob, sizeof(blob),
                                          0, 0);
     test_true_got(rc == MEMCACHED_SUCCESS or rc == MEMCACHED_BUFFERED,
-                  memcached_strerror(NULL, rc));
+                  memcached_last_error_message(memc));
     test_compare(query_id +1, memcached_query_id(memc));
   }
 
@@ -3297,7 +3304,12 @@ test_return_t noreply_test(memcached_st *memc)
       uint32_t flags;
       char* value=memcached_get(memc, key, strlen(key),
                                 &length, &flags, &ret);
-      test_true_got(ret == MEMCACHED_SUCCESS && value != NULL, memcached_strerror(NULL, ret));
+      // For the moment we will just go to the next key
+      if (MEMCACHED_TIMEOUT == ret)
+      {
+        continue;
+      }
+      test_true_hint(ret == MEMCACHED_SUCCESS and value != NULL, memcached_last_error_message(memc));
       switch (count)
       {
       case 0: /* FALLTHROUGH */
@@ -4789,7 +4801,7 @@ test_return_t kill_HUP_TEST(memcached_st *original_memc)
                              0, 0));
   test_true_got(kill(pid, SIGHUP) == 0, strerror(errno));
 
-  test_compare(MEMCACHED_SUCCESS,
+  test_compare(MEMCACHED_CONNECTION_FAILURE,
                memcached_set(memc, 
                              test_literal_param(__func__), // Keys
                              test_literal_param(__func__), // Values
index 181379868be7b48abe6d34b93df7499219040002..5fab96fe2a9e71f00db4d24061fb6f5f008433d6 100644 (file)
@@ -74,7 +74,7 @@ static void *world_create(libtest::server_startup_st& servers, test_return_t& er
     return NULL;
   }
 
-  for (uint32_t x= 0; x < servers.count(); x++)
+  for (uint32_t x= 0; x < servers.servers_to_run(); x++)
   {
     in_port_t port= libtest::get_free_port();
 
@@ -208,63 +208,66 @@ static bool world_destroy(void *object)
 
 typedef test_return_t (*libmemcached_test_callback_fn)(memcached_st *);
 
-static test_return_t _runner_default(libmemcached_test_callback_fn func, libmemcached_test_container_st *container)
-{
-  if (func)
+class LibmemcachedRunner : public libtest::Runner {
+public:
+  test_return_t run(test_callback_fn* func, void *object)
   {
-    test_true(container);
-    test_true(container->memc);
-    test_return_t ret;
-    try {
-      ret= func(container->memc);
-    }
-    catch (std::exception& e)
-    {
-      libtest::Error << e.what();
-      return TEST_FAILURE;
-    }
-
-    return ret;
+    return _runner_default(libmemcached_test_callback_fn(func), (libmemcached_test_container_st*)object);
   }
 
-  return TEST_SUCCESS;
-}
-
-static test_return_t _pre_runner_default(libmemcached_test_callback_fn func, libmemcached_test_container_st *container)
-{
-  if (func)
+  test_return_t pre(test_callback_fn* func, void *object)
   {
-    return func(container->parent);
+    return _pre_runner_default(libmemcached_test_callback_fn(func), (libmemcached_test_container_st*)object);
   }
 
-  return TEST_SUCCESS;
-}
-
-static test_return_t _post_runner_default(libmemcached_test_callback_fn func, libmemcached_test_container_st *container)
-{
-  if (func)
+  test_return_t post(test_callback_fn* func, void *object)
   {
-    return func(container->parent);
+    return _post_runner_default(libmemcached_test_callback_fn(func), (libmemcached_test_container_st*)object);
   }
 
-  return TEST_SUCCESS;
-}
-
-class LibmemcachedRunner : public libtest::Runner {
-public:
-  test_return_t run(test_callback_fn* func, void *object)
+private:
+  test_return_t _runner_default(libmemcached_test_callback_fn func, libmemcached_test_container_st *container)
   {
-    return _runner_default(libmemcached_test_callback_fn(func), (libmemcached_test_container_st*)object);
+    test_compare(true, check());
+
+    if (func)
+    {
+      test_true(container);
+      test_true(container->memc);
+      test_return_t ret;
+      try {
+        ret= func(container->memc);
+      }
+      catch (std::exception& e)
+      {
+        libtest::Error << e.what();
+        return TEST_FAILURE;
+      }
+
+      return ret;
+    }
+
+    return TEST_SUCCESS;
   }
 
-  test_return_t pre(test_callback_fn* func, void *object)
+  test_return_t _pre_runner_default(libmemcached_test_callback_fn func, libmemcached_test_container_st *container)
   {
-    return _pre_runner_default(libmemcached_test_callback_fn(func), (libmemcached_test_container_st*)object);
+    if (func)
+    {
+      return func(container->parent);
+    }
+
+    return TEST_SUCCESS;
   }
 
-  test_return_t post(test_callback_fn* func, void *object)
+  test_return_t _post_runner_default(libmemcached_test_callback_fn func, libmemcached_test_container_st *container)
   {
-    return _post_runner_default(libmemcached_test_callback_fn(func), (libmemcached_test_container_st*)object);
+    if (func)
+    {
+      return func(container->parent);
+    }
+
+    return TEST_SUCCESS;
   }
 };
 
index d867ef88ef9c6a3f553890cd63442ba120627764..b1748cab4cb2249653e5cb31eaef12056e64fcab 100644 (file)
@@ -63,10 +63,10 @@ static void *world_create(libtest::server_startup_st& servers, test_return_t& er
     return NULL;
   }
 
-  for (uint32_t x= 0; x < servers.count(); x++)
+  for (uint32_t x= 0; x < servers.servers_to_run(); x++)
   {
     const char *argv[1]= { "memcached" };
-    if (not servers.start_socket_server("memcached", libtest::get_free_port(), 1, argv))
+    if (servers.start_socket_server("memcached", libtest::get_free_port(), 1, argv) == false)
     {
       fatal_message("Could not launch memcached");
     }