Merge lp:~493pocbrcycmdw7yksonho9o2qzz-o18bz-d18ecat4t1b76tkfi3vttrkfngli/libmemcache...
authorContinuous Integration <ci@tangent.org>
Sun, 2 Feb 2014 13:49:39 +0000 (05:49 -0800)
committerContinuous Integration <ci@tangent.org>
Sun, 2 Feb 2014 13:49:39 +0000 (05:49 -0800)
34 files changed:
.quickly [deleted file]
ChangeLog
GNUmakefile [new file with mode: 0644]
Makefile.am
bootstrap.sh
clients/include.am
clients/memcp.cc
configure.ac
libmemcached/behavior.cc
libmemcached/connect.cc
libmemcached/fetch.cc
libmemcached/include.am
libmemcached/quit.cc
libmemcached/server.hpp
libmemcached/virtual_bucket.c
libtest/comparison.cc
libtest/formatter.cc
libtest/include.am
libtest/unittest.cc
libtest/valgrind.h
m4/ax_check_library.m4
m4/ax_compiler_vendor.m4
m4/ax_dlopen.m4 [deleted file]
m4/ax_harden_compiler_flags.m4
m4/ax_pthread.m4
m4/ax_restore_flags.m4
m4/ax_sasl.m4
m4/ax_save_flags.m4
tests/include.am
tests/libmemcached-1.0/all_tests.h
tests/libmemcached-1.0/mem_functions.cc
tests/libmemcached-1.0/mem_functions.h
tests/libmemcached_world.h
tests/mem_udp.cc

diff --git a/.quickly b/.quickly
deleted file mode 100644 (file)
index 637e364..0000000
--- a/.quickly
+++ /dev/null
@@ -1,5 +0,0 @@
-project = libmemcached
-version = 0.4.2
-template = pandora-build
-project-type = library
-pandora-version = 0.175
index 5fbed1604d924502373be1e7b4c50f8d78f6d42b..19a440203d4f49f30e8041235c7acfa8f5e3cfe2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,5 @@
 1.0.18
+* MEMCACHED_BEHAVIOR_RETRY_TIMEOUT can now be set to zero.
 
 1.0.17 Tue Apr  2 14:02:01 HST 2013
 * Remove c++ namespace that was being exposed (the API should be plug compatible)..
diff --git a/GNUmakefile b/GNUmakefile
new file mode 100644 (file)
index 0000000..33ec5ac
--- /dev/null
@@ -0,0 +1,36 @@
+# -*-Makefile-*-
+#
+_bootstrap_Makefile := $(wildcard [M]akefile)
+_bootstrap_config-status := $(wildcard config.status)
+
+ALL_RECURSIVE_TARGETS=
+
+ifneq ($(_bootstrap_Makefile),)
+  include Makefile
+else
+  ifneq ($(_bt_config-status),)
+    $(srcdir)/config.status
+    $(MAKE) $(AM_MAKEFLAGS) configure
+  endif
+
+.DEFAULT_GOAL:= basic_build
+srcdir= .
+
+configure: bootstrap.sh
+       @$(srcdir)/bootstrap.sh -a
+
+Makefile: configure
+       @$(srcdir)/bootstrap.sh -c
+
+.PHONY: basic_build
+basic_build: Makefile
+       @$(MAKE) $(AM_MAKEFLAGS)
+endif
+
+ALL_RECURSIVE_TARGETS+= $(AM_RECURSIVE_TARGETS)
+
+ifneq ($(word 2, $(MAKECMDGOALS)), )
+ifneq ($(filter $(ALL_RECURSIVE_TARGETS), $(MAKECMDGOALS)), )
+.NOTPARALLEL:
+endif
+endif
index cc65cb781bbbb5fbe9e9f1101397d99a8886eda2..7432e682d45d3cb5fe2dbc429892d5cc7c8e7c47 100644 (file)
@@ -31,7 +31,6 @@ MAINTAINERCLEANFILES=
 
 DISTCLEANFILES+= aminclude.am
 
-EXTRA_DIST+= .quickly
 EXTRA_DIST+= README.FIRST
 EXTRA_DIST+= README.win32
 
@@ -152,5 +151,7 @@ maintainer-clean-local:
        -rm -f m4/ltsugar.m4
        -rm -f m4/ltversion.m4
        -rm -f m4/lt~obsolete.m4
+       -rm -f m4/test-driver
        -rmdir build-aux
        -rm -rf ${top_builddir}/html
+       -rm -f bootstrap
index c3347d4aef168537a2a131445c7665f70fae0ae3..d45c919464205c1fab567142541d50ffd71b863a 100755 (executable)
@@ -38,7 +38,7 @@
 #   LIBTOOLIZE
 #   MAKE
 #   PREFIX
-#   TESTS_ENVIRONMENT
+#   LOG_COMPILER
 #   VERBOSE
 #   WARNINGS
 #
@@ -486,8 +486,8 @@ save_BUILD ()
     die "OLD_MAKE($OLD_MAKE) was set on push, programmer error!"
   fi
 
-  if [[ -n "$OLD_TESTS_ENVIRONMENT" ]]; then
-    die "OLD_TESTS_ENVIRONMENT($OLD_TESTS_ENVIRONMENT) was set on push, programmer error!"
+  if [[ -n "$OLD_LOG_COMPILER" ]]; then
+    die "OLD_LOG_COMPILER($OLD_LOG_COMPILER) was set on push, programmer error!"
   fi
 
   if [[ -n "$CONFIGURE" ]]; then
@@ -502,8 +502,8 @@ save_BUILD ()
     OLD_MAKE=$MAKE
   fi
 
-  if [[ -n "$TESTS_ENVIRONMENT" ]]; then
-    OLD_TESTS_ENVIRONMENT=$TESTS_ENVIRONMENT
+  if [[ -n "$LOG_COMPILER" ]]; then
+    OLD_LOG_COMPILER=$LOG_COMPILER
   fi
 }
 
@@ -525,15 +525,15 @@ restore_BUILD ()
     MAKE=$OLD_MAKE
   fi
 
-  if [[ -n "$OLD_TESTS_ENVIRONMENT" ]]; then
-    TESTS_ENVIRONMENT=$OLD_TESTS_ENVIRONMENT
+  if [[ -n "$OLD_LOG_COMPILER" ]]; then
+    LOG_COMPILER=$OLD_LOG_COMPILER
   fi
 
   OLD_CONFIGURE=
   OLD_CONFIGURE_ARG=
   OLD_PREFIX=
   OLD_MAKE=
-  OLD_TESTS_ENVIRONMENT=
+  OLD_LOG_COMPILER=
 
   export -n CC CXX
 }
@@ -567,9 +567,9 @@ make_valgrind ()
   # If we don't have a configure, then most likely we will be missing libtool
   assert_file 'configure'
   if [[ -x 'libtool' ]]; then
-    TESTS_ENVIRONMENT="./libtool --mode=execute $VALGRIND_COMMAND"
+    LOG_COMPILER="./libtool --mode=execute $VALGRIND_COMMAND"
   else
-    TESTS_ENVIRONMENT="$VALGRIND_COMMAND"
+    LOG_COMPILER="$VALGRIND_COMMAND"
   fi
 
   make_target 'all'
@@ -703,11 +703,11 @@ make_skeleton ()
     else
       if [[ -n "$DISPLAY" ]]; then
         if command_exists 'wine'; then
-          TESTS_ENVIRONMENT='wine'
+          LOG_COMPILER='wine'
         fi
       fi
 
-      if [[ -n "$TESTS_ENVIRONMENT" ]]; then
+      if [[ -n "$LOG_COMPILER" ]]; then
         make_target 'check' 'warn' || warn "$MAKE check failed"
         ret=$?
       fi
@@ -935,9 +935,9 @@ make_gdb ()
     # If we don't have a configure, then most likely we will be missing libtool
     assert_file 'configure'
     if [[ -f 'libtool' ]]; then
-      TESTS_ENVIRONMENT="./libtool --mode=execute $GDB_COMMAND"
+      LOG_COMPILER="./libtool --mode=execute $GDB_COMMAND"
     else
-      TESTS_ENVIRONMENT="$GDB_COMMAND"
+      LOG_COMPILER="$GDB_COMMAND"
     fi
 
     make_target 'check'
@@ -974,9 +974,9 @@ make_target ()
     run_configure
   fi
 
-  if [ -n "$TESTS_ENVIRONMENT" ]; then
+  if [ -n "$LOG_COMPILER" ]; then
     if $verbose; then
-      echo "TESTS_ENVIRONMENT=$TESTS_ENVIRONMENT"
+      echo "LOG_COMPILER=$LOG_COMPILER"
     fi
   fi
 
@@ -1386,16 +1386,16 @@ print_setup ()
     echo "MAKE=$MAKE"
   fi
 
-  if [[ -n "$MAKE_TARGET" ]]; then
-    echo "MAKE_TARGET=$MAKE_TARGET"
+  if [[ -n "$BOOTSTRAP_TARGET" ]]; then
+    echo "BOOTSTRAP_TARGET=$BOOTSTRAP_TARGET"
   fi
 
   if [[ -n "$PREFIX" ]]; then
     echo "PREFIX=$PREFIX"
   fi
 
-  if [[ -n "$TESTS_ENVIRONMENT" ]]; then
-    echo "TESTS_ENVIRONMENT=$TESTS_ENVIRONMENT"
+  if [[ -n "$LOG_COMPILER" ]]; then
+    echo "LOG_COMPILER=$LOG_COMPILER"
   fi
 
   if [[ -n "$VCS_CHECKOUT" ]]; then
@@ -1511,7 +1511,7 @@ check_make_target()
 execute_job ()
 {
   # We should always have a target by this point
-  assert MAKE_TARGET
+  assert BOOTSTRAP_TARGET
 
   determine_target_platform
 
@@ -1535,8 +1535,8 @@ execute_job ()
     fi
   fi
 
-  # Use OLD_TESTS_ENVIRONMENT for tracking the state of the variable
-  local OLD_TESTS_ENVIRONMENT=
+  # Use OLD_LOG_COMPILER for tracking the state of the variable
+  local OLD_LOG_COMPILER=
 
   # Set ENV PREFIX in order to set --prefix for ./configure
   if [[ -n "$PREFIX" ]]; then 
@@ -1547,17 +1547,17 @@ execute_job ()
     make_maintainer_clean
   fi
 
-  local MAKE_TARGET_ARRAY
-  MAKE_TARGET_ARRAY=( $MAKE_TARGET )
+  local BOOTSTRAP_TARGET_ARRAY
+  BOOTSTRAP_TARGET_ARRAY=( $BOOTSTRAP_TARGET )
 
-  for target in "${MAKE_TARGET_ARRAY[@]}"
+  for target in "${BOOTSTRAP_TARGET_ARRAY[@]}"
   do
     # If we are running inside of Jenkins, we want to only run some of the possible tests
     if $jenkins_build_environment; then
       check_make_target $target
       ret=$?
       if [ $ret -ne 0 ]; then
-        die "Unknown MAKE_TARGET option: $target"
+        die "Unknown BOOTSTRAP_TARGET option: $target"
       fi
     fi
 
@@ -1663,7 +1663,7 @@ main ()
   declare -x VCS_CHECKOUT=
 
   # Variables we control globally
-  local -a MAKE_TARGET=
+  local -a BOOTSTRAP_TARGET=
   local CONFIGURE=
   local use_libtool=false
   local verbose=false
@@ -1688,7 +1688,7 @@ main ()
   local OLD_CONFIGURE_ARG=
   local OLD_PREFIX=
   local OLD_MAKE=
-  local OLD_TESTS_ENVIRONMENT=
+  local OLD_LOG_COMPILER=
 
   # If we call autoreconf on the platform or not
   local AUTORECONF_REBUILD_HOST=false
@@ -1726,47 +1726,36 @@ main ()
   local OPT_TARGET=
   parse_command_line_options "$@"
 
-  nassert MAKE_TARGET
+  nassert BOOTSTRAP_TARGET
 
   if [ -n "$OPT_TARGET" ]; then
-    MAKE_TARGET="$OPT_TARGET"
+    BOOTSTRAP_TARGET="$OPT_TARGET"
   fi
 
   # If we are running under Jenkins we predetermine what tests we will run against
-  # This MAKE_TARGET can be overridden by parse_command_line_options based MAKE_TARGET changes.
+  # This BOOTSTRAP_TARGET can be overridden by parse_command_line_options based BOOTSTRAP_TARGET changes.
   # We don't want Jenkins overriding other variables, so we NULL them.
-  if [ -z "$MAKE_TARGET" ]; then
+  if [ -z "$BOOTSTRAP_TARGET" ]; then
     if $jenkins_build_environment; then
       if [[ -n "$JENKINS_TARGET" ]]; then
-        MAKE_TARGET="$JENKINS_TARGET"
-      else
-        if [[ -n "$label" ]]; then
-          check_make_target $label
-          if [ $? -eq 0 ]; then
-            MAKE_TARGET="$label"
-          fi
-        fi
-
-        if [[ -n "$LABEL" ]]; then
-          check_make_target $LABEL
-          if [ $? -eq 0 ]; then
-            MAKE_TARGET="$LABEL"
-          fi
-        fi
-
-        if [ -z "$MAKE_TARGET" ]; then
-          MAKE_TARGET='jenkins'
+        check_make_target $JENKINS_TARGET
+        if [ $? -eq 0 ]; then
+          BOOTSTRAP_TARGET="$JENKINS_TARGET"
+        else
+          die "label not found: $label"
         fi
+      else
+          BOOTSTRAP_TARGET='jenkins'
       fi
     fi
   fi
 
-  if [ -z "$MAKE_TARGET" ]; then
-    MAKE_TARGET="make_default"
+  if [ -z "$BOOTSTRAP_TARGET" ]; then
+    BOOTSTRAP_TARGET="make_default"
   fi
 
   # We should always have a target by this point
-  assert MAKE_TARGET
+  assert BOOTSTRAP_TARGET
 
   execute_job
   local ret=$?
@@ -1882,7 +1871,7 @@ bootstrap ()
   export LIBTOOLIZE_OPTIONS
   export MAKE
   export PREFIX_ARG
-  export TESTS_ENVIRONMENT
+  export LOG_COMPILER
   export VERBOSE
   export WARNINGS
 
index bd38ef0420132ee9656b56bf93c34262c1527e64..50c76cc631bbb7c04b3c7e0a0292660e24f78036 100644 (file)
@@ -97,10 +97,12 @@ clients_memaslap_LDADD=
 clients_memaslap_LDADD+= @LIBEVENT_LIB@
 clients_memaslap_LDADD+= $(CLIENTS_LDADDS)
 
+clients_memcapable_CXXFLAGS= @PTHREAD_CFLAGS@
 clients_memcapable_SOURCES=
 clients_memcapable_SOURCES+= clients/memcapable.cc
 clients_memcapable_SOURCES+= libmemcached/byteorder.cc
 clients_memcapable_LDADD= $(CLIENTS_LDADDS)
+clients_memcapable_LDADD+= @PTHREAD_LIBS@
 
 test-start-server:
        clients/memflush --servers=localhost
index 6c6d1e96fe6142bdac3186445787b3df720c9a49..d76faeecca8d31da36e6f23d2ebec9a3e1ea813d 100644 (file)
@@ -68,13 +68,13 @@ static long strtol_wrapper(const char *nptr, int base, bool *error)
       or (errno != 0 && val == 0))
   {
     *error= true;
-    return EXIT_SUCCESS;
+    return 0;
   }
 
   if (endptr == nptr)
   {
     *error= true;
-    return EXIT_SUCCESS;
+    return 0;
   }
 
   *error= false;
@@ -385,10 +385,10 @@ static void options_parse(int argc, char *argv[])
     case OPT_EXPIRE: /* --expire */
       {
         bool strtol_error;
-        opt_expires= (time_t)strtol_wrapper(optarg, 16, &strtol_error);
+        opt_expires= (time_t)strtol_wrapper(optarg, 10, &strtol_error);
         if (strtol_error == true)
         {
-          fprintf(stderr, "Bad value passed via --flag\n");
+          fprintf(stderr, "Bad value passed via --expire\n");
           exit(1);
         }
       }
index 54177ac4656dac2547fdf244d72c6e1dd34a739c..e74ebb7b0f5b49936e4e73ae9d7628b2fbae10e2 100644 (file)
@@ -7,18 +7,22 @@
 # the COPYING file in this directory for full text.
 
 m4_include([version.m4])
+AC_PREREQ([2.61])
 AC_INIT([libmemcached],VERSION_NUMBER,[http://libmemcached.org/])
+
+# Setup the compilers early on
+AC_PROG_CC([cc gcc clang])
+AC_PROG_CXX([c++ g++ clang++])
+
 AC_CONFIG_AUX_DIR([build-aux])
 AC_CONFIG_MACRO_DIR([m4])
 
-AC_CANONICAL_TARGET
+AC_CANONICAL_HOST
 AC_ARG_PROGRAM
 AC_USE_SYSTEM_EXTENSIONS
 
 AM_INIT_AUTOMAKE([1.11 color-tests -Wno-portability subdir-objects foreign tar-ustar])
 
-AC_PREREQ([2.61])
-
 AC_CONFIG_HEADERS([mem_config.h:mem_config.in])dnl Keep filename to 8.3 for MS-DOS.
 AC_SUBST([AUTOHEADER_FILE],[mem_config.h])
 AC_CONFIG_SRCDIR([libmemcached/memcached.cc])
@@ -47,17 +51,20 @@ AX_HEX_VERSION([LIBHASHKIT],[1.0.0])
 m4_include([libhashkit/include.m4])
 
 LT_PREREQ([2.2])
-LT_INIT
+LT_INIT([dlopen])
 LT_LANG([C++])
 LT_LIB_M
 
+AC_SUBST([lt_cv_dlopen_libs])
+
+
 AC_PROG_CC_C99
 AS_IF([test "x${ac_cv_prog_cc_c99}" == "xno"],[AC_MSG_ERROR([No c99 compatible compiler found])])
 
 AC_DEFUN([CHECK_CXX0X],[
           AC_LANG_PUSH([C++])
           AX_CHECK_COMPILE_FLAG([-std=c++0x],[
-                                 CXXFLAGS="$CXXFLAGS -std=c++0x"])
+                                 CXX="$CXX -std=c++0x"])
           AC_LANG_POP([C++])
           ])
 CHECK_CXX0X
@@ -65,13 +72,8 @@ CHECK_CXX0X
 AX_ASSERT
 
 AX_PLATFORM
-
 m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
 
-AX_CXX_HEADER_STDCXX_98
-AS_IF([test "x$ax_cv_cxx_stdcxx_98" = "xno"],
-      [AC_MSG_ERROR([Your system lacks a new enough C++ compiler])])
-
 AC_DEFUN([LIBMEMCACHED_PROTOCOL],
          [AC_ARG_ENABLE([libmemcachedprotocol],
                         [AS_HELP_STRING([--enable-libmemcachedprotocol],
@@ -254,9 +256,6 @@ AC_CHECK_LIB([rt],[clock_gettime],
              [AC_DEFINE([HAVE_CLOCK_GETTIME],[0],[Have clock_gettime])])
 
 
-# Check for the ability to call dlopen (used in libhostile)
-AX_DLOPEN
-
 AC_CHECK_HEADERS([atomic.h])
 AS_IF([test "x$ac_cv_header_atomic_h" = "xyes"],
       [AC_CHECK_FUNCS([atomic_add_64])
@@ -297,8 +296,10 @@ SOCKET_SEND_FLAGS
 AX_UUID_GENERATE_TIME_SAFE
 
 AC_DEFUN([CHECK_FOR_PTHREAD_AND_SASL],
-         [AX_PTHREAD(, [AC_MSG_ERROR([could not find libpthread])])
+         [AC_LANG_PUSH([C++])
+         AX_PTHREAD(, [AC_MSG_ERROR([could not find libpthread])])
          AX_PTHREAD_TIMEDJOIN_NP
+         AC_LANG_POP([C++])
 
          # The sasl functions should only be visible if we build with sasl support
          #
index 2675e23602db163dad9e00ca5e171025739fd606..081f8082f1ad89b1ef45160fe7e02b5b249188b3 100644 (file)
@@ -230,11 +230,6 @@ memcached_return_t memcached_behavior_set(memcached_st *shell,
     break;
 
   case MEMCACHED_BEHAVIOR_RETRY_TIMEOUT:
-    if (data == 0)
-    {
-      return memcached_set_error(*ptr, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT,
-                                        memcached_literal_param("MEMCACHED_BEHAVIOR_RETRY_TIMEOUT requires a value greater then zero."));
-    }
     ptr->retry_timeout= int32_t(data);
     break;
 
index b60bbd8ce61ae9768186988e6652d43743f2547d..3c82f641cb0f1f75fb12f12dceeb09ed4140b356 100644 (file)
@@ -198,7 +198,7 @@ static memcached_return_t set_hostinfo(memcached_instance_st* server)
   struct addrinfo hints;
   memset(&hints, 0, sizeof(struct addrinfo));
 
-  hints.ai_family= AF_INET;
+  hints.ai_family= AF_UNSPEC;
   if (memcached_is_udp(server->root))
   {
     hints.ai_protocol= IPPROTO_UDP;
index 7f677d023e57aacaf43b9ef9d17059e637645b56..d795109259108b5bde95c5682cf5ca04f523790b 100644 (file)
@@ -194,6 +194,7 @@ memcached_result_st *memcached_fetch_result(memcached_st *ptr,
   *error= MEMCACHED_MAXIMUM_RETURN; // We use this to see if we ever go into the loop
   memcached_instance_st *server;
   memcached_return_t read_ret= MEMCACHED_SUCCESS;
+  bool connection_failures= false;
   while ((server= memcached_io_get_readable_server(ptr, read_ret)))
   {
     char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
@@ -203,6 +204,11 @@ memcached_result_st *memcached_fetch_result(memcached_st *ptr,
     {
       continue;
     }
+    else if (*error == MEMCACHED_CONNECTION_FAILURE)
+    {
+      connection_failures= true;
+      continue;
+    }
     else if (*error == MEMCACHED_SUCCESS)
     {
       result->count++;
@@ -230,6 +236,16 @@ memcached_result_st *memcached_fetch_result(memcached_st *ptr,
   {
     *error= MEMCACHED_NOTFOUND;
   }
+  else if (connection_failures)
+  {
+    /*  
+        If we have a connection failure to some servers, the caller may
+        wish to treat that differently to getting a definitive NOT_FOUND
+        from all servers, so return MEMCACHED_CONNECTION_FAILURE to allow
+        that. 
+        */
+    *error= MEMCACHED_CONNECTION_FAILURE;
+  }
   else if (*error == MEMCACHED_SUCCESS)
   {
     *error= MEMCACHED_END;
index 0aabc2487c6f254f49ad5f70c24076fb7d7bb030..1eccc3695f3bad09cd86fe35fa4f2ec64c37b694 100644 (file)
@@ -2,7 +2,7 @@
 # included from Top Level Makefile.am
 # All paths should be given relative to the root
 
-libmemcached_libmemcached_la_SOURCES =
+libmemcached_libmemcached_la_SOURCES=
 
 include libmemcached/csl/include.am
 
@@ -56,8 +56,11 @@ lib_LTLIBRARIES+= libmemcached/libmemcached.la
 EXTRA_libmemcached_libmemcached_la_DEPENDENCIES=
 libmemcached_libmemcached_la_LIBADD=
 libmemcached_libmemcached_la_LDFLAGS=
-libmemcached_libmemcached_la_CFLAGS= -DBUILDING_LIBMEMCACHED
-libmemcached_libmemcached_la_CXXFLAGS= -DBUILDING_LIBMEMCACHED
+libmemcached_libmemcached_la_CFLAGS=
+libmemcached_libmemcached_la_CXXFLAGS=
+
+libmemcached_libmemcached_la_CFLAGS+= -DBUILDING_LIBMEMCACHED
+libmemcached_libmemcached_la_CXXFLAGS+= -DBUILDING_LIBMEMCACHED
 
 if BUILD_WIN32
 libmemcached_libmemcached_la_CFLAGS+= -DBUILDING_HASHKIT
@@ -122,12 +125,13 @@ libmemcached_libmemcached_la_SOURCES+= libmemcached/virtual_bucket.c
 libmemcached/options.cc: libmemcached/csl/parser.h
 
 libmemcached_libmemcached_la_LDFLAGS+= -version-info ${MEMCACHED_LIBRARY_VERSION}
-libmemcached_libmemcached_la_LIBADD+= @DL_LIB@
+libmemcached_libmemcached_la_LIBADD+= @lt_cv_dlopen_libs@
 
 if HAVE_SASL
+libmemcached_libmemcached_la_CFLAGS+= @PTHREAD_CFLAGS@
 libmemcached_libmemcached_la_CXXFLAGS+= @PTHREAD_CFLAGS@
 libmemcached_libmemcached_la_LIBADD+= @PTHREAD_LIBS@
-libmemcached_libmemcached_la_LIBADD+= @LIBSASL_LIB@
+libmemcached_libmemcached_la_LIBADD+= @SASL_LIB@
 endif
 
 if HAVE_DTRACE
index 7ece03b9bbabad323c11a58480f01b21277989a9..04b77ceac1d97b81c5e98b38a47a29dc553fa4d8 100644 (file)
@@ -120,8 +120,15 @@ void memcached_quit_server(memcached_instance_st* instance, bool io_death)
 
   instance->close_socket();
 
-  if (io_death)
+  if (io_death and memcached_is_udp(instance->root))
   {
+    /*
+       If using UDP, we should stop using the server briefly on every IO
+       failure. If using TCP, it may be that the connection went down a
+       short while ago (e.g. the server failed) and we've only just
+       noticed, so we should only set the retry timeout on a connect
+       failure (which doesn't call this method).
+       */
     memcached_mark_server_for_timeout(instance);
   }
 }
index 0c6ac798f35a0c7a59695be5a4f60dd77331c10e..708e64606610f462a73903fad188d6e5c1944c99 100644 (file)
@@ -76,17 +76,20 @@ static inline void memcached_mark_server_for_timeout(memcached_instance_st* serv
 {
   if (server->state != MEMCACHED_SERVER_STATE_IN_TIMEOUT)
   {
-    struct timeval next_time;
-    if (gettimeofday(&next_time, NULL) == 0)
+    if (server->root->retry_timeout != 0)
     {
-      server->next_retry= next_time.tv_sec +server->root->retry_timeout;
-    }
-    else
-    {
-      server->next_retry= 1; // Setting the value to 1 causes the timeout to occur immediatly
-    }
+      struct timeval next_time;
+      if (gettimeofday(&next_time, NULL) == 0)
+      {
+        server->next_retry= next_time.tv_sec +server->root->retry_timeout;
+      }
+      else
+      {
+        server->next_retry= 1; // Setting the value to 1 causes the timeout to occur immediatly
+      }
 
-    server->state= MEMCACHED_SERVER_STATE_IN_TIMEOUT;
+      server->state= MEMCACHED_SERVER_STATE_IN_TIMEOUT;
+    }
     if (server->server_failure_counter_query_id != server->root->query_id)
     {
       server->server_failure_counter++;
index 92c5dc45143d19ba61f80739447f1f667cb05163..951881bd390e42640fbda13bed64f2c230933451 100644 (file)
@@ -109,14 +109,11 @@ uint32_t memcached_virtual_bucket_get(const memcached_st *self, uint32_t digest)
   {
     if (self->virtual_bucket)
     {
-      if (self->virtual_bucket)
-      {
-        uint32_t result= (uint32_t) (digest & (self->virtual_bucket->size -1));
-        return self->virtual_bucket->buckets[result].master;
-      }
-
-      return (uint32_t) (digest & (self->number_of_hosts -1));
+      uint32_t result= (uint32_t) (digest & (self->virtual_bucket->size -1));
+      return self->virtual_bucket->buckets[result].master;
     }
+
+    return (uint32_t) (digest & (self->number_of_hosts -1));
   }
 
   return 0;
index 9b3e45e58907be57935a462b8c2aeed048b12e57..c0c21937f9512b08dc127916cf14bb0ae1a89e5f 100644 (file)
@@ -51,7 +51,7 @@ bool jenkins_is_caller(void)
 
 bool gdb_is_caller(void)
 {
-  if (bool(getenv("TESTS_ENVIRONMENT")) and strstr(getenv("TESTS_ENVIRONMENT"), "gdb"))
+  if (bool(getenv("LOG_COMPILER")) and strstr(getenv("LOG_COMPILER"), "gdb"))
   {
     return true;
   }
@@ -66,7 +66,7 @@ bool gdb_is_caller(void)
 
 bool helgrind_is_caller(void)
 {
-  if (bool(getenv("TESTS_ENVIRONMENT")) and strstr(getenv("TESTS_ENVIRONMENT"), "helgrind"))
+  if (bool(getenv("LOG_COMPILER")) and strstr(getenv("LOG_COMPILER"), "helgrind"))
   {
     return true;
   }
index 01c57609554ecc52d2f9ab036c7baf9cb6a770d0..7cb3ea0ab8fb55ca8b7e0083b66638527128017a 100644 (file)
   
 namespace libtest {
 
+std::string& escape4XML(std::string const& arg, std::string& escaped_string)
+{
+  escaped_string.clear();
+
+  escaped_string+= '"';
+  for (std::string::const_iterator x= arg.begin(), end= arg.end(); x != end; ++x)
+  {
+    unsigned char c= *x;
+    if (c == '&')
+    {
+      escaped_string+= "&amp;";
+    }
+    else if (c == '>')
+    {
+      escaped_string+= "&gt;";
+    }
+    else if (c == '<')
+    {
+      escaped_string+= "&lt;";
+    }
+    else if (c == '\'')
+    {
+      escaped_string+= "&apos;";  break;
+    }
+    else if (c == '"')
+    {
+      escaped_string+= "&quot;";
+    }
+    else if (c == ' ')
+    {
+      escaped_string+= ' ';
+    }
+    else if (isalnum(c))
+    {
+      escaped_string+= c;
+    }
+    else 
+    {
+      char const* const hexdig= "0123456789ABCDEF";
+      escaped_string+= "&#x";
+      escaped_string+= hexdig[c >> 4];
+      escaped_string+= hexdig[c & 0xF];
+      escaped_string+= ';';
+    }
+  }
+  escaped_string+= '"';
+
+  return escaped_string;
+}
+
 class TestCase {
 public:
   TestCase(const std::string& arg):
@@ -110,7 +160,10 @@ TestCase* Formatter::current()
 void Formatter::skipped()
 {
   current()->result(TEST_SKIPPED);
-  Out << name() << "." << current()->name() <<  "\t\t\t\t\t" << "[ " << test_strerror(current()->result()) << " ]";
+  Out << name() << "." 
+      << current()->name()
+      <<  "\t\t\t\t\t" 
+      << "[ " << test_strerror(current()->result()) << " ]";
 
   reset();
 }
@@ -120,7 +173,9 @@ void Formatter::failed()
   assert(current());
   current()->result(TEST_FAILURE);
 
-  Out << name() << "." << current()->name() <<  "\t\t\t\t\t" << "[ " << test_strerror(current()->result()) << " ]";
+  Out << name()
+    << "." << current()->name() <<  "\t\t\t\t\t" 
+    << "[ " << test_strerror(current()->result()) << " ]";
 
   reset();
 }
@@ -129,6 +184,7 @@ void Formatter::success(const libtest::Timer& timer_)
 {
   assert(current());
   current()->result(TEST_SUCCESS, timer_);
+  std::string escaped_string;
 
   Out << name() << "."
     << current()->name()
@@ -141,38 +197,50 @@ void Formatter::success(const libtest::Timer& timer_)
 
 void Formatter::xml(libtest::Framework& framework_, std::ofstream& output)
 {
-  output << "<testsuites name=\"" << framework_.name() << "\">" << std::endl;
+  std::string escaped_string;
+
+  output << "<testsuites name=" 
+    << escape4XML(framework_.name(), escaped_string) << ">" << std::endl;
+
   for (Suites::iterator framework_iter= framework_.suites().begin();
        framework_iter != framework_.suites().end();
        ++framework_iter)
   {
-    output << "\t<testsuite name=\"" << (*framework_iter)->name() << "\"  classname=\"\" package=\"\">" << std::endl;
+    output << "\t<testsuite name=" 
+      << escape4XML((*framework_iter)->name(), escaped_string)
+#if 0
+      << "  classname=\"\" package=\"\"" 
+#endif
+      << ">" << std::endl;
 
     for (TestCases::iterator case_iter= (*framework_iter)->formatter()->testcases().begin();
          case_iter != (*framework_iter)->formatter()->testcases().end();
          ++case_iter)
     {
-      output << "\t\t<testcase name=\"
-        << (*case_iter)->name() 
-        << "\" time=\"" 
+      output << "\t\t<testcase name=" 
+        << escape4XML((*case_iter)->name(), escaped_string)
+        << " time=\"" 
         << (*case_iter)->timer().elapsed_milliseconds() 
-        << "\">" 
-        << std::endl;
+        << "\""; 
 
       switch ((*case_iter)->result())
       {
         case TEST_SKIPPED:
+        output << ">" << std::endl;
         output << "\t\t <skipped/>" << std::endl;
+        output << "\t\t</testcase>" << std::endl;
         break;
 
         case TEST_FAILURE:
+        output << ">" << std::endl;
         output << "\t\t <failure message=\"\" type=\"\"/>"<< std::endl;
+        output << "\t\t</testcase>" << std::endl;
         break;
 
         case TEST_SUCCESS:
+        output << "/>" << std::endl;
         break;
       }
-      output << "\t\t</testcase>" << std::endl;
     }
     output << "\t</testsuite>" << std::endl;
   }
index 4d1d8428dc3e4d79b2cb27ea9ee2565d4754fe80..0e5efc7a09c161b6b2497a7bd8cda72e532e0f46 100644 (file)
@@ -7,7 +7,7 @@
 LIBTOOL_COMMAND= ${abs_top_builddir}/libtool --mode=execute
 VALGRIND_EXEC_COMMAND= $(LIBTOOL_COMMAND) valgrind --tool=memcheck --error-exitcode=1 --leak-check=yes --track-fds=yes --malloc-fill=A5 --free-fill=DE
 SGCHECK_EXEC_COMMAND= $(LIBTOOL_COMMAND) valgrind --tool=exp-sgcheck --error-exitcode=1
-VALGRIND_COMMAND= TESTS_ENVIRONMENT="valgrind" $(VALGRIND_EXEC_COMMAND)
+VALGRIND_COMMAND= LOG_COMPILER="valgrind" $(VALGRIND_EXEC_COMMAND)
 HELGRIND_COMMAND= $(LIBTOOL_COMMAND) valgrind --tool=helgrind --read-var-info=yes --error-exitcode=1 --read-var-info=yes
 DRD_COMMAND= $(LIBTOOL_COMMAND) valgrind --tool=drd --free-is-write=yes --error-exitcode=1
 SGCHECK_COMMAND= $(LIBTOOL_COMMAND) valgrind --tool=exp-sgcheck --error-exitcode=1
@@ -25,22 +25,22 @@ export SGCHECK_COMMAND
 export GDB_COMMAND
 
 valgrind:
-       @echo make check TESTS_ENVIRONMENT="\"$(VALGRIND_EXEC_COMMAND)\""
+       @echo make check LOG_COMPILER="\"$(VALGRIND_EXEC_COMMAND)\""
 
 sgcheck:
-       @echo make check TESTS_ENVIRONMENT="\"$(SGCHECK_EXEC_COMMAND)\""
+       @echo make check LOG_COMPILER="\"$(SGCHECK_EXEC_COMMAND)\""
 
 valgrind-supressions:
-       @echo make check TESTS_ENVIRONMENT="\"$(VALGRIND_SUPRESSION)\""
+       @echo make check LOG_COMPILER="\"$(VALGRIND_SUPRESSION)\""
 
 gdb:
-       @echo make check TESTS_ENVIRONMENT="\"$(GDB_COMMAND)\""
+       @echo make check LOG_COMPILER="\"$(GDB_COMMAND)\""
 
 helgrind:
-       @echo make check TESTS_ENVIRONMENT="\"$(HELGRIND_COMMAND)\""
+       @echo make check LOG_COMPILER="\"$(HELGRIND_COMMAND)\""
 
 drd:
-       @echo make check TESTS_ENVIRONMENT="\"$(DRD_COMMAND)\""
+       @echo make check LOG_COMPILER="\"$(DRD_COMMAND)\""
 
 EXTRA_DIST+= libtest/run.gdb
 EXTRA_DIST+= libtest/version.h
@@ -170,8 +170,10 @@ libtest_libtest_la_LDFLAGS=
 # We are either building in tree, or with
 libtest_libtest_la_SOURCES+= libtest/memcached.cc
 
+if HAVE_LIBDRIZZLE
 libtest_libtest_la_LDFLAGS+= @LIBDRIZZLE_LDFLAGS@
 libtest_libtest_la_LIBADD+= @LIBDRIZZLE_LIB@
+endif
 
 libtest_libtest_la_SOURCES+= libtest/gearmand.cc
 
@@ -244,7 +246,7 @@ libtest_backtrace_SOURCES=
 libtest_backtrace_LDADD=
 libtest_backtrace_SOURCES+= libtest/backtrace_test.cc
 libtest_backtrace_SOURCES+= libmemcached/backtrace.cc
-libtest_backtrace_LDADD+= @DL_LIB@
+libtest_backtrace_LDADD+= @lt_cv_dlopen_libs@
 noinst_PROGRAMS+= libtest/backtrace
 test-backtrace: libtest/backtrace
        @libtest/backtrace
index c21438890c31760d13ae9ed14fc0fa3c4ab6644b..a2843d27fc324f9c4de5076104cce1ef8f751b20 100644 (file)
@@ -540,7 +540,7 @@ static test_return_t memcached_sasl_test(void *object)
   server_startup_st *servers= (server_startup_st*)object;
   test_true(servers);
 
-  test_skip(false, bool(getenv("TESTS_ENVIRONMENT")));
+  test_skip(false, bool(getenv("LOG_COMPILER")));
 
   if (MEMCACHED_SASL_BINARY)
   {
index 9d9e8bac88ab2b82f03b6f011808713f11e3bd3b..effeddc1faeeae30d3801e7ccb2868db4cffe0f5 100644 (file)
 
 static inline bool valgrind_is_caller(void)
 {
-  if (getenv("TESTS_ENVIRONMENT")  && strstr(getenv("TESTS_ENVIRONMENT"), "valgrind"))
+  if (getenv("LOG_COMPILER")  && strstr(getenv("LOG_COMPILER"), "valgrind"))
   {
-    if (strstr(getenv("TESTS_ENVIRONMENT"), "--tool") == NULL)
+    if (strstr(getenv("LOG_COMPILER"), "--tool") == NULL)
     {
       return true;
     }
 
-    if (strstr(getenv("TESTS_ENVIRONMENT"), "--tool=memcheck"))
+    if (strstr(getenv("LOG_COMPILER"), "--tool=memcheck"))
     {
       return true;
     }
index dd27ff41ff15727790a0ed0f4950f1a1cfd872f9..35ab7114324017a423304a72582ffd7a4ba0f2b4 100644 (file)
@@ -87,9 +87,6 @@ AC_DEFUN([AX_CHECK_LIBRARY],
 
     AS_IF([test "$]AS_TR_SH([ax_cv_have_]$1)[" = "yes"],
         [AC_DEFINE([HAVE_]$1, [1], [Define to 1 if ]$1[ is found])
-        AC_SUBST($1[_CPPFLAGS])
-        AC_SUBST($1[_LDFLAGS])
-        AC_SUBST($1[_LIB],[-l]$3)
         ifelse([$4], , :, [$4])],
         [ifelse([$5], , :, [$5])])
     ])
index 13bf7dba19a0bdce207cb2aa14a32ed564676ed0..c2f421bc992a5a9f1123ad6a61df04e875c170a1 100644 (file)
@@ -4,7 +4,7 @@
 #
 # SYNOPSIS
 #
-#   AX_COMPILER_VENDOR()
+#   AX_COMPILER_VENDOR
 #
 # DESCRIPTION
 #
@@ -44,7 +44,7 @@
 #   modified version of the Autoconf Macro, you may extend this special
 #   exception to the GPL to apply to your modified version as well.
 
-#serial 11
+#serial 12
 
 AC_DEFUN([AX_COMPILER_VENDOR],
 [AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor,
@@ -53,6 +53,7 @@ AC_DEFUN([AX_COMPILER_VENDOR],
            ibm:       __xlc__,__xlC__,__IBMC__,__IBMCPP__
            pathscale: __PATHCC__,__PATHSCALE__
            clang:     __clang__
+           fujitsu:   __FUJITSU
            gnu:       __GNUC__
            sun:       __SUNPRO_C,__SUNPRO_CC
            hp:        __HP_cc,__HP_aCC
diff --git a/m4/ax_dlopen.m4 b/m4/ax_dlopen.m4
deleted file mode 100644 (file)
index 514c578..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#serial 2
-
-AC_DEFUN([AX_DLOPEN],
-    [AS_IF([test "x$enable_shared" = xyes],
-      [AX_CHECK_LIBRARY([DL],[dlfcn.h],[dl],
-        [AC_DEFINE([HAVE_LIBDL],[1],[Have dlopen])
-        AC_CHECK_LIB([dl],[dlopen],[AC_DEFINE([HAVE_DLOPEN],[1],[Have dlopen])])
-        AC_CHECK_LIB([dl],[dladdr],[AC_DEFINE([HAVE_DLADDR],[1],[Have dladdr])])])])
-    ])
-
index 2be988a372ae751f2724c6c43320baacf669e222..5d5bfdc125519748fa1fc5c9a8e14ef63745089c 100644 (file)
@@ -212,7 +212,6 @@ AC_DEFUN([_HARDEN_CC_COMPILER_FLAGS],
           _APPEND_COMPILE_FLAGS_ERROR([-Wunused-parameter])
           _APPEND_COMPILE_FLAGS_ERROR([-Wunused-local-typedefs])
           _APPEND_COMPILE_FLAGS_ERROR([-Wwrite-strings])
-          _APPEND_COMPILE_FLAGS_ERROR([-floop-parallelize-all])
           _APPEND_COMPILE_FLAGS_ERROR([-fwrapv])
           _APPEND_COMPILE_FLAGS_ERROR([-fmudflapt])
           _APPEND_COMPILE_FLAGS_ERROR([-pipe])
@@ -318,7 +317,6 @@ AC_DEFUN([_HARDEN_CXX_COMPILER_FLAGS],
           _APPEND_COMPILE_FLAGS_ERROR([-Wunused-local-typedefs])
           _APPEND_COMPILE_FLAGS_ERROR([-Wwrite-strings])
           _APPEND_COMPILE_FLAGS_ERROR([-Wformat-security])
-          _APPEND_COMPILE_FLAGS_ERROR([-floop-parallelize-all])
           _APPEND_COMPILE_FLAGS_ERROR([-fwrapv])
           _APPEND_COMPILE_FLAGS_ERROR([-fmudflapt])
           _APPEND_COMPILE_FLAGS_ERROR([-pipe])
index ebea7fb511c1e2c41f28bc1735d1cfa314af21c0..180557910c4181685ceb555ca3ef84640f394a7a 100644 (file)
@@ -82,7 +82,7 @@
 #   modified version of the Autoconf Macro, you may extend this special
 #   exception to the GPL to apply to your modified version as well.
 
-#serial 22
+#serial 23
 
 AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
 AC_DEFUN([AX_PTHREAD], [
index cf03cae790154a1f7d11b874925b488cbe57e310..aafd363865aa73e776837f0a947a35ca6cbfaed6 100644 (file)
@@ -4,28 +4,49 @@
 #
 # SYNOPSIS
 #
-#   AX_RESTORE_FLAGS()
+#   AX_RESTORE_FLAGS([namespace])
 #
 # DESCRIPTION
 #
-#   Restore common compilation flags from temporary variables
+#   Restore common compilation flags from temporary variables.
+#
+#   Compilation flags includes: CPPFLAGS, CFLAGS, CXXFLAGS, LDFLAGS, LIBS,
+#   OBJCFLAGS.
+#
+#   By default these flags are restored to a global (empty) namespace, but
+#   user could restore from specific NAMESPACE by using
+#   AX_RESTORE_FLAGS(NAMESPACE) macro.
+#
+#   Typical usage is like:
+#
+#     AX_SAVE_FLAGS(mypackage)
+#     CPPFLAGS="-Imypackagespath ${CPPFLAGS}"
+#     dnl ... do some detection ...
+#     AX_RESTORE_FLAGS(mypackage)
 #
 # LICENSE
 #
 #   Copyright (c) 2009 Filippo Giunchedi <filippo@esaurito.net>
+#   Copyright (c) 2011 The Board of Trustees of the Leland Stanford Junior University
+#   Copyright (c) 2011 Russ Allbery <rra@stanford.edu>
+#   Copyright (c) 2013 Bastien ROUCARIES <roucaries.bastien+autoconf@gmail.com>
 #
 #   Copying and distribution of this file, with or without modification, are
 #   permitted in any medium without royalty provided the copyright notice
 #   and this notice are preserved. This file is offered as-is, without any
 #   warranty.
 
-#serial 3
+#serial 6
+
+# save one flag in name space
+AC_DEFUN([_AX_RESTORE_ONE_FLAG],[dnl
+  AS_VAR_PUSHDEF([_ax_restore_flag_var], [$2[]_$1[]_ax_save_flags])
+  AS_VAR_COPY($2[],_ax_restore_flag_var)
+  AS_VAR_POPDEF([_ax_restore_flag_var])
+])
 
-AC_DEFUN([AX_RESTORE_FLAGS], [
-  CPPFLAGS="${CPPFLAGS_save}"
-  CFLAGS="${CFLAGS_save}"
-  CXXFLAGS="${CXXFLAGS_save}"
-  OBJCFLAGS="${OBJCFLAGS_save}"
-  LDFLAGS="${LDFLAGS_save}"
-  LIBS="${LIBS_save}"
+AC_DEFUN([AX_RESTORE_FLAGS], [dnl
+   m4_foreach([FLAG], dnl
+             [_AX_SAVE_FLAGS_LIST()], dnl
+             [_AX_RESTORE_ONE_FLAG([$1],FLAG)])
 ])
index aa0bd1b770f5b83c5517c66b09d9edc2861d5f3b..44bb65e3c54b296cd190c225a919c7a7dc9711c7 100644 (file)
 #   and this notice are preserved. This file is offered as-is, without any
 #   warranty.
 
-#serial 2
+#serial 3
 
 AC_DEFUN([AX_SASL_OPTION],
-    [AC_REQUIRE([AX_SASL_CHECK])
-    AC_ARG_ENABLE([sasl],
-      [AS_HELP_STRING([--disable-sasl], [Build with sasl support @<:@default=on@:>@])],
-      [ac_enable_sasl="$enableval"],
-      [ac_enable_sasl=yes])
+         [AC_REQUIRE([AX_SASL_CHECK])
+         AC_ARG_ENABLE([sasl],
+                       [AS_HELP_STRING([--disable-sasl], [Build with sasl support @<:@default=on@:>@])],
+                       [ac_enable_sasl="$enableval"],
+                       [ac_enable_sasl=yes])
 
-    AS_IF([test "x${ac_enable_sasl}" = xyes],
-      [AC_MSG_CHECKING([checking to see if enabling sasl])
-      AS_IF([test "x${ax_sasl_check}" = xyes],
-        [ax_sasl_option=yes],
-        [AC_MSG_WARN([request to add sasl support failed, please see config.log])
-        ac_enable_sasl=no
-        ax_sasl_option=no])
-      AC_MSG_RESULT(["$ax_sasl_option"])
-      ])
-    AM_CONDITIONAL([HAVE_SASL],[test "x${ax_sasl_option}" = xyes])
-    ])
+         AS_IF([test "x${ac_enable_sasl}" = xyes],[
+               AC_MSG_CHECKING([checking to see if enabling sasl])
+               AS_IF([test "x${ax_sasl_check}" = xyes],[
+                     ax_sasl_option=yes],[
+                     AC_MSG_WARN([request to add sasl support failed, please see config.log])
+                     ac_enable_sasl=no
+                     ax_sasl_option=no])
+               AC_MSG_RESULT(["$ax_sasl_option"])],[
+               ax_sasl_option=no])
+         AM_CONDITIONAL([HAVE_SASL],[test "x${ax_sasl_option}" = xyes])
+         ])
 
-AC_DEFUN([AX_SASL_CHECK],
-    [ax_sasl_check=no
-    AX_CHECK_LIBRARY([LIBSASL],[sasl/sasl.h],[sasl2],
-      [ax_sasl_check=yes
-      AC_SUBST([SASL_LIB],[[-lsasl2]])
-      ])
-    AC_MSG_CHECKING([checking to see if sasl works])
-    AC_MSG_RESULT(["$ax_sasl_check"])
-    ])
+AC_DEFUN([AX_SASL_CHECK],[
+         AX_CHECK_LIBRARY([LIBSASL],[sasl/sasl.h],[sasl2],[
+                          ax_sasl_check=yes
+                          AC_SUBST([SASL_LIB],[[-lsasl2]])],[
+                          ax_sasl_check=no])
+         AC_MSG_CHECKING([checking to see if sasl works])
+         AC_MSG_RESULT(["$ax_sasl_check"])
+         ])
index d2a054223b910e8da1815417b9488d17ed707105..39f45be46ebc3fbef54a5979e9762e2d95482287 100644 (file)
@@ -4,28 +4,68 @@
 #
 # SYNOPSIS
 #
-#   AX_SAVE_FLAGS()
+#   AX_SAVE_FLAGS([NAMESPACE])
 #
 # DESCRIPTION
 #
-#   Save common compilation flags into temporary variables
+#   Save common compilation flags into temporary variables.
+#
+#   Compilation flags includes: CPPFLAGS, CFLAGS, CXXFLAGS, LDFLAGS, LIBS,
+#   OBJCFLAGS.
+#
+#   By default these flags are saved to a global (empty) namespace, but user
+#   could specify a specific NAMESPACE to AX_SAVE_FLAGS macro and latter
+#   restore it by using AX_RESTORE_FLAGS(NAMESPACE).
+#
+#     AX_SAVE_FLAGS(mypackage)
+#     CPPFLAGS="-Imypackagespath ${CPPFLAGS}"
+#     dnl .. do some detection ...
+#     AX_RESTORE_FLAGS(mypackage)
 #
 # LICENSE
 #
 #   Copyright (c) 2009 Filippo Giunchedi <filippo@esaurito.net>
+#   Copyright (c) 2011 The Board of Trustees of the Leland Stanford Junior University
+#   Copyright (c) 2011 Russ Allbery <rra@stanford.edu>
+#   Copyright (c) 2013 Bastien ROUCARIES <roucaries.bastien+autoconf@gmail.com>
 #
 #   Copying and distribution of this file, with or without modification, are
 #   permitted in any medium without royalty provided the copyright notice
 #   and this notice are preserved. This file is offered as-is, without any
 #   warranty.
 
-#serial 3
+#serial 7
+
+# list of flag to save
+AC_DEFUN([_AX_SAVE_FLAGS_LIST],[dnl
+[CCASFLAGS],dnl
+[CFLAGS],dnl
+[CPPFLAGS],dnl
+[CXXFLAGS],dnl
+[ERLCFLAGS],dnl
+[FCFLAGS],dnl
+[FCLIBS],dnl
+[FFLAGS],dnl
+[FLIBS],dnl
+[GCJFLAGS],dnl
+[JAVACFLAGS],dnl
+[LDFLAGS],dnl
+[LIBS],dnl
+[OBJCFLAGS],dnl
+[OBJCXXFLAGS],dnl
+[UPCFLAGS],dnl
+[VALAFLAGS]dnl
+])
+
+# save one flag in name space
+AC_DEFUN([_AX_SAVE_ONE_FLAG],[
+  AS_VAR_PUSHDEF([_ax_save_flag_var], [$2[]_$1[]_ax_save_flags])
+  AS_VAR_COPY(_ax_save_flag_var, $2[])
+  AS_VAR_POPDEF([_ax_save_flag_var])
+])
 
-AC_DEFUN([AX_SAVE_FLAGS], [
-  CPPFLAGS_save="${CPPFLAGS}"
-  CFLAGS_save="${CFLAGS}"
-  CXXFLAGS_save="${CXXFLAGS}"
-  OBJCFLAGS_save="${OBJCFLAGS}"
-  LDFLAGS_save="${LDFLAGS}"
-  LIBS_save="${LIBS}"
+AC_DEFUN([AX_SAVE_FLAGS],[dnl
+   m4_foreach([FLAG], dnl
+             [_AX_SAVE_FLAGS_LIST()], dnl
+             [_AX_SAVE_ONE_FLAG([$1],FLAG)])
 ])
index 414b143b393c69039a5f652f81f9e430eb6dc516..49d45dd42d9a8a4ecfbaabea60a2d3f6e1968c94 100644 (file)
@@ -27,10 +27,10 @@ noinst_HEADERS+= tests/runner.h
 # Cycle should always run first
 tests_cycle_CFLAGS= $(AM_CFLAGS) $(NO_CONVERSION) $(NO_STRICT_ALIASING)
 tests_cycle_CXXFLAGS= $(AM_CXXFLAGS)
-tests_cycle_CXXFLAGS+= ${PTHREAD_CFLAGS}
+tests_cycle_CXXFLAGS+= @PTHREAD_CFLAGS@
 tests_cycle_SOURCES= tests/cycle.cc
 tests_cycle_LDADD= $(TESTS_LDADDS)
-tests_cycle_LDADD+= ${PTHREAD_LIBS}
+tests_cycle_LDADD+= @PTHREAD_LIBS@
 check_PROGRAMS+= tests/cycle
 noinst_PROGRAMS+= tests/cycle
 
index d748d39e7e31e31e04df94a1c9550716b2a5097c..b4abe9dde7e3fe43df781066f8e6431ff0e3b62f 100644 (file)
@@ -284,6 +284,7 @@ test_st regression_tests[]= {
   {"lp:1021819", true, (test_callback_fn*)regression_1021819_TEST },
   {"lp:1048945", true, (test_callback_fn*)regression_1048945_TEST },
   {"lp:1067242", true, (test_callback_fn*)regression_1067242_TEST },
+  {"lp:1251482", true, (test_callback_fn*)regression_bug_1251482 },
   {0, false, (test_callback_fn*)0}
 };
 
index e69e0e121396e132a179a0953f29d8a68a99aea2..365839d5614ca8c61ef80f8bdad81bd2f165df9b 100644 (file)
@@ -4559,7 +4559,7 @@ test_return_t wrong_failure_counter_two_test(memcached_st *memc)
 
   /* Put a retry timeout to effectively activate failure_limit effect */
   test_compare(MEMCACHED_SUCCESS,
-               memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_RETRY_TIMEOUT, true));
+               memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_RETRY_TIMEOUT, 1));
 
   /* change behavior that triggers memcached_quit()*/
   test_compare(MEMCACHED_SUCCESS,
@@ -4841,6 +4841,28 @@ test_return_t regression_bug_490520(memcached_st *original_memc)
   return TEST_SUCCESS;
 }
 
+test_return_t regression_bug_1251482(memcached_st*)
+{
+  test::Memc memc("--server=localhost:5");
+
+  memcached_behavior_set(&memc, MEMCACHED_BEHAVIOR_RETRY_TIMEOUT, 0);
+
+  for (size_t x= 4; x; --x)
+  {
+    size_t value_length;
+    memcached_return_t rc;
+    char *value= memcached_get(&memc,
+                               test_literal_param(__func__),
+                               &value_length, NULL, &rc);
+
+    test_false(value);
+    test_compare(0LLU, value_length);
+    test_compare(MEMCACHED_CONNECTION_FAILURE, rc);
+  }
+
+  return TEST_SUCCESS;
+}
+
 test_return_t regression_1009493_TEST(memcached_st*)
 {
   memcached_st* memc= memcached_create(NULL);
index 757369316fbcfafccda44d9cecfadce089ae1f55..41aea1189c97a71d86ee8e1ca04d49d0bc12a16c 100644 (file)
@@ -187,3 +187,4 @@ test_return_t regression_1009493_TEST(memcached_st*);
 test_return_t regression_1048945_TEST(memcached_st*);
 test_return_t regression_1067242_TEST(memcached_st*);
 test_return_t comparison_operator_memcached_st_and__memcached_return_t_TEST(memcached_st*);
+test_return_t regression_bug_1251482(memcached_st*);
index 4d4953ee724980a2261feaf4c3cfdb3d2396933e..2608778c9b13c497bccbc517833665c12ec0d842 100644 (file)
@@ -50,7 +50,7 @@ static void *world_create(libtest::server_startup_st& servers, test_return_t& er
     SKIP_UNLESS(libtest::has_libmemcached_sasl());
 
     // Assume we are running under valgrind, and bail
-    if (getenv("TESTS_ENVIRONMENT"))
+    if (getenv("LOG_COMPILER"))
     {
       error= TEST_SKIPPED;
       return NULL;
index 2267fac0d5cdc9ad50771ebf266ed151fe97506f..535841461a9ad149edbf20f69618227616686c99 100644 (file)
@@ -145,7 +145,7 @@ static test_return_t init_udp(memcached_st *memc)
 
 static test_return_t init_udp_valgrind(memcached_st *memc)
 {
-  if (getenv("TESTS_ENVIRONMENT"))
+  if (getenv("LOG_COMPILER"))
   {
     return TEST_SKIPPED; 
   }
@@ -157,7 +157,7 @@ static test_return_t init_udp_valgrind(memcached_st *memc)
 
 static test_return_t binary_init_udp(memcached_st *memc)
 {
-  if (getenv("TESTS_ENVIRONMENT"))
+  if (getenv("LOG_COMPILER"))
   {
     return TEST_SKIPPED; 
   }
@@ -269,7 +269,7 @@ static test_return_t set_udp_behavior_test(memcached_st *memc)
 static test_return_t udp_set_test(memcached_st *memc)
 {
   // Assume we are running under valgrind, and bail 
-  if (getenv("TESTS_ENVIRONMENT"))
+  if (getenv("LOG_COMPILER"))
   {
     return TEST_SUCCESS; 
   }