Hello community,

here is the log from the commit of package memcached for openSUSE:Factory 
checked in at 2020-04-05 20:53:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/memcached (Old)
 and      /work/SRC/openSUSE:Factory/.memcached.new.3248 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "memcached"

Sun Apr  5 20:53:17 2020 rev:45 rq:791377 version:1.6.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/memcached/memcached.changes      2019-09-20 
14:45:06.166979275 +0200
+++ /work/SRC/openSUSE:Factory/.memcached.new.3248/memcached.changes    
2020-04-05 20:53:21.821173380 +0200
@@ -1,0 +2,49 @@
+Wed Apr  1 23:59:38 UTC 2020 - Marcus Rueckert <mrueck...@suse.de>
+
+- disable extstore also on ppc(64) 
+
+-------------------------------------------------------------------
+Wed Apr  1 23:26:11 UTC 2020 - Marcus Rueckert <mrueck...@suse.de>
+
+- apply patch from https://github.com/memcached/memcached/pull/634
+  fix building with LTO and also building with -fno-common.
+  (634.patch)
+
+-------------------------------------------------------------------
+Thu Mar 26 01:22:59 UTC 2020 - Marcus Rueckert <mrueck...@suse.de>
+
+- apply patch from https://github.com/memcached/memcached/pull/635
+  to fix crashes we saw during the testsuite (635.patch)
+- disable extstore on s390 for now as there are known bugs on that
+  platform
+
+-------------------------------------------------------------------
+Tue Mar 24 21:27:33 UTC 2020 - Marcus Rueckert <mrueck...@suse.de>
+
+- limit tls support to 15 and above 
+
+-------------------------------------------------------------------
+Tue Mar 24 21:20:51 UTC 2020 - Marcus Rueckert <mrueck...@suse.de>
+
+- disable lto until the 2 settings structs are resolved 
+
+-------------------------------------------------------------------
+Tue Mar 24 20:54:55 UTC 2020 - Marcus Rueckert <mrueck...@suse.de>
+
+- update to version 1.6.2 (boo# 1167522) CVE-2020-10931
+  https://github.com/memcached/memcached/wiki/ReleaseNotes162
+  https://github.com/memcached/memcached/wiki/ReleaseNotes161
+  https://github.com/memcached/memcached/wiki/ReleaseNotes160
+  https://github.com/memcached/memcached/wiki/ReleaseNotes1522
+  https://github.com/memcached/memcached/wiki/ReleaseNotes1521
+  https://github.com/memcached/memcached/wiki/ReleaseNotes1520
+  https://github.com/memcached/memcached/wiki/ReleaseNotes1519
+  https://github.com/memcached/memcached/wiki/ReleaseNotes1518
+- dropped all patches after reviewing with upstream:
+  memcached-1.4.5.dif
+  memcached-autofoo.patch
+  memcached-use-endian_h.patch
+- enable TLS support (new BR: openssl-devel perl-IO-Socket-SSL
+  perl-Net-SSLeay)
+
+-------------------------------------------------------------------

Old:
----
  memcached-1.4.5.dif
  memcached-1.5.17.tar.gz
  memcached-autofoo.patch
  memcached-use-endian_h.patch

New:
----
  634.patch
  635.patch
  memcached-1.6.2.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ memcached.spec ++++++
--- /var/tmp/diff_new_pack.pe5Tyq/_old  2020-04-05 20:53:22.761174398 +0200
+++ /var/tmp/diff_new_pack.pe5Tyq/_new  2020-04-05 20:53:22.761174398 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package memcached
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -20,8 +20,15 @@
 %if ! %{defined _fillupdir}
   %define _fillupdir %{_localstatedir}/adm/fillup-templates
 %endif
+
+%if 0%{?suse_version} > 1500
+%bcond_without tls
+%else
+%bcond_with    tls
+%endif
+
 Name:           memcached
-Version:        1.5.17
+Version:        1.6.2
 Release:        0
 Summary:        A high-performance, distributed memory object caching system
 License:        BSD-3-Clause
@@ -32,14 +39,18 @@
 Source2:        %{name}.sysconfig
 Source3:        memcached-rpmlintrc
 Source4:        memcached.service
-Patch0:         memcached-1.4.5.dif
-Patch1:         memcached-autofoo.patch
-Patch2:         memcached-use-endian_h.patch
+Patch:          
https://patch-diff.githubusercontent.com/raw/memcached/memcached/pull/635.patch 
+Patch1:         
https://patch-diff.githubusercontent.com/raw/memcached/memcached/pull/634.patch
 BuildRequires:  autoconf
 BuildRequires:  automake
 BuildRequires:  cyrus-sasl-devel
 BuildRequires:  libevent-devel
 BuildRequires:  libtool
+%if %{with tls}
+BuildRequires:  openssl-devel >= 1.1.0
+BuildRequires:  perl-IO-Socket-SSL
+BuildRequires:  perl-Net-SSLeay
+%endif
 BuildRequires:  pkgconfig
 Requires(pre):  %fillup_prereq
 Requires(pre):  %{_sbindir}/groupadd
@@ -79,19 +90,22 @@
 
 %prep
 %setup -q
-%patch0
+%patch -p1
 %patch1 -p1
-%patch2
 
 %build
 autoreconf -fi
-%if 0%{?suse_version} <= 1140
-export LIBEVENT_CFLAGS="-I%{_includedir}"
-export LIBEVENT_LIBS="-levent"
-%endif
 %configure \
+%if %{with tls}
+  --enable-tls \
+%endif
        --enable-sasl \
+  --enable-sasl-pwdb \
+  --enable-seccomp \
        --disable-coverage \
+  %ifarch s390 s390x ppc ppc64
+  --disable-extstore \
+  %endif
        --bindir=%{_sbindir}
 
 make %{?_smp_mflags}

++++++ memcached-autofoo.patch -> 634.patch ++++++
--- /work/SRC/openSUSE:Factory/memcached/memcached-autofoo.patch        
2019-09-20 14:45:04.966979514 +0200
+++ /work/SRC/openSUSE:Factory/.memcached.new.3248/634.patch    2020-04-05 
20:53:21.097172596 +0200
@@ -1,321 +1,59 @@
-Index: memcached-1.5.17/configure.ac
-===================================================================
---- memcached-1.5.17.orig/configure.ac 2019-07-16 00:34:51.000000000 +0200
-+++ memcached-1.5.17/configure.ac      2019-09-03 11:47:53.521535332 +0200
-@@ -4,10 +4,13 @@ m4_include([m4/c99-backport.m4])
- AC_INIT([memcached], [VERSION_NUMBER], [memcac...@googlegroups.com])
- AC_CANONICAL_HOST
- AC_CONFIG_SRCDIR([memcached.c])
--AM_INIT_AUTOMAKE([foreign])
-+AM_INIT_AUTOMAKE([foreign -Wall -Wno-portability tar-pax subdir-objects])
- AM_CONFIG_HEADER([config.h])
- 
- AC_PROG_CC
-+AC_PROG_CC_STDC
-+AC_USE_SYSTEM_EXTENSIONS
-+AC_SYS_LARGEFILE
- 
- dnl **********************************************************************
- dnl DETECT_ICC ([ACTION-IF-YES], [ACTION-IF-NO])
-@@ -113,14 +116,11 @@ AC_DEFUN([AC_C_DETECT_SASL_CB_GETCONF],
- [
-     AC_CACHE_CHECK([for SASL_CB_GETCONF],
-         [ac_cv_c_sasl_cb_getconf],
--        [AC_TRY_COMPILE(
--            [
-+        [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
- #include <sasl/sasl.h>
--            ], [
-+            ]], [[
- unsigned long val = SASL_CB_GETCONF;
--            ],
--            [ ac_cv_c_sasl_cb_getconf=yes ],
--            [ ac_cv_c_sasl_cb_getconf=no ])
-+            ]])],[ ac_cv_c_sasl_cb_getconf=yes ],[ ac_cv_c_sasl_cb_getconf=no 
])
-         ])
-     AS_IF([test "$ac_cv_c_sasl_cb_getconf" = "yes"],
-           [AC_DEFINE([HAVE_SASL_CB_GETCONF], 1,
-@@ -251,23 +251,6 @@ fi
- AC_SUBST(PROFILER_FLAGS)
- 
- 
--AC_ARG_ENABLE(64bit,
--  [AS_HELP_STRING([--enable-64bit],[build 64bit version])])
--if test "x$enable_64bit" = "xyes"
--then
--    org_cflags=$CFLAGS
--    CFLAGS=-m64
--    AC_RUN_IFELSE(
--      [AC_LANG_PROGRAM([], [dnl
--return sizeof(void*) == 8 ? 0 : 1;
--      ])
--    ],[
--      CFLAGS="-m64 $org_cflags"
--    ],[
--    AC_MSG_ERROR([Don't know how to build a 64-bit object.])
--    ])
--fi
--
- # Issue 213: Search for clock_gettime to help people linking
- #            with a static version of libevent
- AC_SEARCH_LIBS(clock_gettime, rt)
-@@ -276,91 +259,7 @@ AC_SEARCH_LIBS(clock_gettime, rt)
- AC_SEARCH_LIBS(socket, socket)
- AC_SEARCH_LIBS(gethostbyname, nsl)
- 
--trylibeventdir=""
--AC_ARG_WITH(libevent,
--       [  --with-libevent=PATH     Specify path to libevent installation ],
--       [
--                if test "x$withval" != "xno" ; then
--                        trylibeventdir=$withval
--                fi
--       ]
--)
--
--dnl ------------------------------------------------------
--dnl libevent detection.  swiped from Tor.  modified a bit.
--
--LIBEVENT_URL=https://www.monkey.org/~provos/libevent/
--
--AC_CACHE_CHECK([for libevent directory], ac_cv_libevent_dir, [
--  saved_LIBS="$LIBS"
--  saved_LDFLAGS="$LDFLAGS"
--  saved_CPPFLAGS="$CPPFLAGS"
--  le_found=no
--  for ledir in $trylibeventdir "" $prefix /usr/local ; do
--    LDFLAGS="$saved_LDFLAGS"
--    LIBS="-levent $saved_LIBS"
--
--    # Skip the directory if it isn't there.
--    if test ! -z "$ledir" -a ! -d "$ledir" ; then
--       continue;
--    fi
--    if test ! -z "$ledir" ; then
--      if test -d "$ledir/lib" ; then
--        LDFLAGS="-L$ledir/lib $LDFLAGS"
--      else
--        LDFLAGS="-L$ledir $LDFLAGS"
--      fi
--      if test -d "$ledir/include" ; then
--        CPPFLAGS="-I$ledir/include $CPPFLAGS"
--      else
--        CPPFLAGS="-I$ledir $CPPFLAGS"
--      fi
--    fi
--    # Can I compile and link it?
--    AC_TRY_LINK([#include <sys/time.h>
--#include <sys/types.h>
--#include <event.h>], [ event_init(); ],
--       [ libevent_linked=yes ], [ libevent_linked=no ])
--    if test $libevent_linked = yes; then
--       if test ! -z "$ledir" ; then
--         ac_cv_libevent_dir=$ledir
--         _myos=`echo $target_os | cut -f 1 -d .`
--         AS_IF(test "$SUNCC" = "yes" -o "x$_myos" = "xsolaris2",
--               [saved_LDFLAGS="$saved_LDFLAGS -Wl,-R$ledir/lib"],
--               [AS_IF(test "$GCC" = "yes",
--                     [saved_LDFLAGS="$saved_LDFLAGS -Wl,-rpath,$ledir/lib"])])
--       else
--         ac_cv_libevent_dir="(system)"
--       fi
--       le_found=yes
--       break
--    fi
--  done
--  LIBS="$saved_LIBS"
--  LDFLAGS="$saved_LDFLAGS"
--  CPPFLAGS="$saved_CPPFLAGS"
--  if test $le_found = no ; then
--    AC_MSG_ERROR([libevent is required.  You can get it from $LIBEVENT_URL
--
--      If it's already installed, specify its path using --with-libevent=/dir/
--])
--  fi
--])
--LIBS="-levent $LIBS"
--if test $ac_cv_libevent_dir != "(system)"; then
--  if test -d "$ac_cv_libevent_dir/lib" ; then
--    LDFLAGS="-L$ac_cv_libevent_dir/lib $LDFLAGS"
--    le_libdir="$ac_cv_libevent_dir/lib"
--  else
--    LDFLAGS="-L$ac_cv_libevent_dir $LDFLAGS"
--    le_libdir="$ac_cv_libevent_dir"
--  fi
--  if test -d "$ac_cv_libevent_dir/include" ; then
--    CPPFLAGS="-I$ac_cv_libevent_dir/include $CPPFLAGS"
--  else
--    CPPFLAGS="-I$ac_cv_libevent_dir $CPPFLAGS"
--  fi
--fi
-+PKG_CHECK_MODULES([LIBEVENT], [libevent])
- 
- trylibssldir=""
- AC_ARG_WITH(libssl,
-@@ -478,14 +377,14 @@ dnl ************************************
- AC_DEFUN([AC_HAVE_SASL_CALLBACK_FT],
- [AC_CACHE_CHECK(for sasl_callback_ft, ac_cv_has_sasl_callback_ft,
- [
--  AC_TRY_COMPILE([
-+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-     #ifdef HAVE_SASL_SASL_H
-     #include <sasl/sasl.h>
-     #include <sasl/saslplug.h>
-     #endif
--  ],[
-+  ]], [[
-     sasl_callback_ft a_callback;
--  ],[
-+  ]])],[
-     ac_cv_has_sasl_callback_ft=yes
-   ],[
-     ac_cv_has_sasl_callback_ft=no
-@@ -507,18 +406,15 @@ AC_DEFUN([AC_C_DETECT_UINT64_SUPPORT],
- [
-     AC_CACHE_CHECK([for print macros for integers (C99 section 7.8.1)],
-         [ac_cv_c_uint64_support],
--        [AC_TRY_COMPILE(
--            [
-+        [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
- #ifdef HAVE_INTTYPES_H
- #include <inttypes.h>
+From aba4ffb5fce37ba6d2977c190592fd35ad7f3462 Mon Sep 17 00:00:00 2001
+From: Kanak Kshetri <kanakkshe...@fastmail.fm>
+Date: Wed, 1 Apr 2020 07:34:16 -0500
+Subject: [PATCH] testapp: Fix failure with -flto=auto
+
+---
+ Makefile.am |  2 +-
+ testapp.c   | 11 +++++------
+ 2 files changed, 6 insertions(+), 7 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 0d30161e7..d62facfce 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -4,7 +4,7 @@ noinst_PROGRAMS = memcached-debug sizes testapp timedrun
+ 
+ BUILT_SOURCES=
+ 
+-testapp_SOURCES = testapp.c util.c util.h stats_prefix.c stats_prefix.h 
jenkins_hash.c murmur3_hash.c hash.c hash.h cache.c
++testapp_SOURCES = testapp.c util.c util.h stats_prefix.c stats_prefix.h 
jenkins_hash.c murmur3_hash.c hash.h cache.c
+ 
+ timedrun_SOURCES = timedrun.c
+ 
+diff --git a/testapp.c b/testapp.c
+index fffed794e..193adda86 100644
+--- a/testapp.c
++++ b/testapp.c
+@@ -21,6 +21,7 @@
+ #include "config.h"
+ #include "cache.h"
+ #include "hash.h"
++#include "jenkins_hash.h"
+ #include "stats_prefix.h"
+ #include "util.h"
+ #include "protocol_binary.h"
+@@ -42,10 +43,7 @@ struct conn {
+     ssize_t (*write)(struct conn *c, const void *buf, size_t count);
+ };
+ 
+-struct settings {
+-    char *hash_algorithm;
+-};
+-struct settings settings;
++hash_func hash;
+ 
+ static ssize_t tcp_read(struct conn *c, void *buf, size_t count);
+ static ssize_t tcp_write(struct conn *c, const void *buf, size_t count);
+@@ -2306,8 +2304,9 @@ int main(int argc, char **argv)
+         enable_ssl = true;
+     }
  #endif
- #include <stdio.h>
--            ], [
-+            ]], [[
-   uint64_t val = 0;
-   fprintf(stderr, "%" PRIu64 "\n", val);
--            ],
--            [ ac_cv_c_uint64_support=yes ],
--            [ ac_cv_c_uint64_support=no ])
-+            ]])],[ ac_cv_c_uint64_support=yes ],[ ac_cv_c_uint64_support=no ])
-         ])
- ])
- 
-@@ -537,12 +433,12 @@ dnl Check if the type socklen_t is defin
- AC_DEFUN([AC_C_SOCKLEN_T],
- [AC_CACHE_CHECK(for socklen_t, ac_cv_c_socklen_t,
- [
--  AC_TRY_COMPILE([
-+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-     #include <sys/types.h>
-     #include <sys/socket.h>
--  ],[
-+  ]], [[
-     socklen_t foo;
--  ],[
-+  ]])],[
-     ac_cv_c_socklen_t=yes
-   ],[
-     ac_cv_c_socklen_t=no
-@@ -581,35 +477,6 @@ fi
- 
- AC_C_ENDIAN
- 
--AC_DEFUN([AC_C_HTONLL],
--[
--    AC_MSG_CHECKING([for htonll])
--    have_htoll="no"
--    AC_TRY_LINK([
--#include <sys/types.h>
--#include <netinet/in.h>
--#ifdef HAVE_INTTYPES_H
--#include <inttypes.h> */
--#endif
--       ], [
--          return htonll(0);
--       ], [
--          have_htoll="yes"
--          AC_DEFINE([HAVE_HTONLL], [1], [Have ntohll])
--    ], [
--          have_htoll="no"
--    ])
--
--    AC_MSG_RESULT([$have_htoll])
--])
--
--AC_C_HTONLL
--
--dnl Check whether the user's system supports pthread
--AC_SEARCH_LIBS(pthread_create, pthread)
--if test "x$ac_cv_search_pthread_create" = "xno"; then
--  AC_MSG_ERROR([Can't enable threads without the POSIX thread library.])
--fi
- 
- AC_CHECK_FUNCS(mlockall)
- AC_CHECK_FUNCS(getpagesizes)
-@@ -670,13 +537,13 @@ dnl These were added in 4.1.2, but 32bit
- dnl lacks testable defines.
- have_gcc_atomics=no
- AC_MSG_CHECKING(for GCC atomics)
--AC_TRY_LINK([],[
-+AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
-   unsigned short a;
-   unsigned short b;
-   b = __sync_add_and_fetch(&a, 1);
-   b = __sync_sub_and_fetch(&a, 2);
--  ],[have_gcc_atomics=yes
--  AC_DEFINE(HAVE_GCC_ATOMICS, 1, [GCC Atomics available])])
-+  ]])],[have_gcc_atomics=yes
-+  AC_DEFINE(HAVE_GCC_ATOMICS, 1, [GCC Atomics available])],[])
- AC_MSG_RESULT($have_gcc_atomics)
- 
- dnl Check for usage of 64bit atomics
-@@ -758,29 +625,5 @@ AM_CONDITIONAL([BUILD_SPECIFICATIONS],
-                [test "x$enable_docs" != "xno" -a "x$XML2RFC" != "xno" -a 
"x$XSLTPROC" != "xno"])
- 
- 
--dnl Let the compiler be a bit more picky. Please note that you cannot
--dnl specify these flags to the compiler before AC_CHECK_FUNCS, because
--dnl the test program will generate a compilation warning and hence fail
--dnl to detect the function ;-)
--if test "$ICC" = "yes"
--then
--   dnl ICC trying to be gcc.
--   CFLAGS="$CFLAGS -diag-disable 187 -Wall -Werror"
--   AC_DEFINE([_GNU_SOURCE],[1],[find sigignore on Linux])
--elif test "$GCC" = "yes"
--then
--  GCC_VERSION=`$CC -dumpversion`
--  CFLAGS="$CFLAGS -Wall -Werror -pedantic -Wmissing-prototypes 
-Wmissing-declarations -Wredundant-decls"
--  case $GCC_VERSION in
--    4.4.*)
--    CFLAGS="$CFLAGS -fno-strict-aliasing"
--    ;;
--  esac
--  AC_DEFINE([_GNU_SOURCE],[1],[find sigignore on Linux])
--elif test "$SUNCC" = "yes"
--then
--  CFLAGS="$CFLAGS -errfmt=error -errwarn -errshort=tags"
--fi
--
- AC_CONFIG_FILES(Makefile doc/Makefile)
- AC_OUTPUT
-Index: memcached-1.5.17/Makefile.am
-===================================================================
---- memcached-1.5.17.orig/Makefile.am  2019-08-28 00:17:56.000000000 +0200
-+++ memcached-1.5.17/Makefile.am       2019-09-03 11:45:07.724581146 +0200
-@@ -1,3 +1,6 @@
-+AM_CFLAGS = -pthread -Wall -Wmissing-prototypes -Wmissing-declarations 
-Wredundant-decls
-+AM_CPPFLAGS = -include $(top_builddir)/config.h
-+
- bin_PROGRAMS = memcached
- pkginclude_HEADERS = protocol_binary.h
- noinst_PROGRAMS = memcached-debug sizes testapp timedrun
-@@ -63,11 +66,12 @@ memcached_SOURCES += tls.c tls.h
- endif
- 
- memcached_debug_SOURCES = $(memcached_SOURCES)
--memcached_CPPFLAGS = -DNDEBUG
--memcached_debug_LDADD = @PROFILER_LDFLAGS@
--memcached_debug_CFLAGS = @PROFILER_FLAGS@
-+memcached_CPPFLAGS = $(AM_CPPFLAGS) -DNDEBUG
-+memcached_debug_LDADD = @PROFILER_LDFLAGS@ $(LIBEVENT_LIBS)
-+memcached_debug_CFLAGS = @PROFILER_FLAGS@ $(AM_CFLAGS)
-+memcached_debug_CPPFLAGS = $(AM_CPPFLAGS)
+-    /* Stats prefix test is sensitive to the choice of hash function */
+-    hash_init(JENKINS_HASH);
++    /* Initialized directly instead of using hash_init to avoid pulling in
++       the definition of settings struct from memcached.h */
++    hash = jenkins_hash;
+     stats_prefix_init(':');
  
--memcached_LDADD =
-+memcached_LDADD = $(LIBEVENT_LIBS)
- memcached_DEPENDENCIES =
- memcached_debug_DEPENDENCIES =
- CLEANFILES=
+     for (num_cases = 0; testcases[num_cases].description; num_cases++) {

++++++ memcached-autofoo.patch -> 635.patch ++++++
--- /work/SRC/openSUSE:Factory/memcached/memcached-autofoo.patch        
2019-09-20 14:45:04.966979514 +0200
+++ /work/SRC/openSUSE:Factory/.memcached.new.3248/635.patch    2020-04-05 
20:53:21.381172904 +0200
@@ -1,321 +1,120 @@
-Index: memcached-1.5.17/configure.ac
-===================================================================
---- memcached-1.5.17.orig/configure.ac 2019-07-16 00:34:51.000000000 +0200
-+++ memcached-1.5.17/configure.ac      2019-09-03 11:47:53.521535332 +0200
-@@ -4,10 +4,13 @@ m4_include([m4/c99-backport.m4])
- AC_INIT([memcached], [VERSION_NUMBER], [memcac...@googlegroups.com])
- AC_CANONICAL_HOST
- AC_CONFIG_SRCDIR([memcached.c])
--AM_INIT_AUTOMAKE([foreign])
-+AM_INIT_AUTOMAKE([foreign -Wall -Wno-portability tar-pax subdir-objects])
- AM_CONFIG_HEADER([config.h])
- 
- AC_PROG_CC
-+AC_PROG_CC_STDC
-+AC_USE_SYSTEM_EXTENSIONS
-+AC_SYS_LARGEFILE
- 
- dnl **********************************************************************
- dnl DETECT_ICC ([ACTION-IF-YES], [ACTION-IF-NO])
-@@ -113,14 +116,11 @@ AC_DEFUN([AC_C_DETECT_SASL_CB_GETCONF],
- [
-     AC_CACHE_CHECK([for SASL_CB_GETCONF],
-         [ac_cv_c_sasl_cb_getconf],
--        [AC_TRY_COMPILE(
--            [
-+        [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
- #include <sasl/sasl.h>
--            ], [
-+            ]], [[
- unsigned long val = SASL_CB_GETCONF;
--            ],
--            [ ac_cv_c_sasl_cb_getconf=yes ],
--            [ ac_cv_c_sasl_cb_getconf=no ])
-+            ]])],[ ac_cv_c_sasl_cb_getconf=yes ],[ ac_cv_c_sasl_cb_getconf=no 
])
-         ])
-     AS_IF([test "$ac_cv_c_sasl_cb_getconf" = "yes"],
-           [AC_DEFINE([HAVE_SASL_CB_GETCONF], 1,
-@@ -251,23 +251,6 @@ fi
- AC_SUBST(PROFILER_FLAGS)
- 
- 
--AC_ARG_ENABLE(64bit,
--  [AS_HELP_STRING([--enable-64bit],[build 64bit version])])
--if test "x$enable_64bit" = "xyes"
--then
--    org_cflags=$CFLAGS
--    CFLAGS=-m64
--    AC_RUN_IFELSE(
--      [AC_LANG_PROGRAM([], [dnl
--return sizeof(void*) == 8 ? 0 : 1;
--      ])
--    ],[
--      CFLAGS="-m64 $org_cflags"
--    ],[
--    AC_MSG_ERROR([Don't know how to build a 64-bit object.])
--    ])
--fi
--
- # Issue 213: Search for clock_gettime to help people linking
- #            with a static version of libevent
- AC_SEARCH_LIBS(clock_gettime, rt)
-@@ -276,91 +259,7 @@ AC_SEARCH_LIBS(clock_gettime, rt)
- AC_SEARCH_LIBS(socket, socket)
- AC_SEARCH_LIBS(gethostbyname, nsl)
- 
--trylibeventdir=""
--AC_ARG_WITH(libevent,
--       [  --with-libevent=PATH     Specify path to libevent installation ],
--       [
--                if test "x$withval" != "xno" ; then
--                        trylibeventdir=$withval
--                fi
--       ]
--)
--
--dnl ------------------------------------------------------
--dnl libevent detection.  swiped from Tor.  modified a bit.
--
--LIBEVENT_URL=https://www.monkey.org/~provos/libevent/
--
--AC_CACHE_CHECK([for libevent directory], ac_cv_libevent_dir, [
--  saved_LIBS="$LIBS"
--  saved_LDFLAGS="$LDFLAGS"
--  saved_CPPFLAGS="$CPPFLAGS"
--  le_found=no
--  for ledir in $trylibeventdir "" $prefix /usr/local ; do
--    LDFLAGS="$saved_LDFLAGS"
--    LIBS="-levent $saved_LIBS"
--
--    # Skip the directory if it isn't there.
--    if test ! -z "$ledir" -a ! -d "$ledir" ; then
--       continue;
--    fi
--    if test ! -z "$ledir" ; then
--      if test -d "$ledir/lib" ; then
--        LDFLAGS="-L$ledir/lib $LDFLAGS"
--      else
--        LDFLAGS="-L$ledir $LDFLAGS"
--      fi
--      if test -d "$ledir/include" ; then
--        CPPFLAGS="-I$ledir/include $CPPFLAGS"
--      else
--        CPPFLAGS="-I$ledir $CPPFLAGS"
--      fi
--    fi
--    # Can I compile and link it?
--    AC_TRY_LINK([#include <sys/time.h>
--#include <sys/types.h>
--#include <event.h>], [ event_init(); ],
--       [ libevent_linked=yes ], [ libevent_linked=no ])
--    if test $libevent_linked = yes; then
--       if test ! -z "$ledir" ; then
--         ac_cv_libevent_dir=$ledir
--         _myos=`echo $target_os | cut -f 1 -d .`
--         AS_IF(test "$SUNCC" = "yes" -o "x$_myos" = "xsolaris2",
--               [saved_LDFLAGS="$saved_LDFLAGS -Wl,-R$ledir/lib"],
--               [AS_IF(test "$GCC" = "yes",
--                     [saved_LDFLAGS="$saved_LDFLAGS -Wl,-rpath,$ledir/lib"])])
--       else
--         ac_cv_libevent_dir="(system)"
--       fi
--       le_found=yes
--       break
--    fi
--  done
--  LIBS="$saved_LIBS"
--  LDFLAGS="$saved_LDFLAGS"
--  CPPFLAGS="$saved_CPPFLAGS"
--  if test $le_found = no ; then
--    AC_MSG_ERROR([libevent is required.  You can get it from $LIBEVENT_URL
--
--      If it's already installed, specify its path using --with-libevent=/dir/
--])
--  fi
--])
--LIBS="-levent $LIBS"
--if test $ac_cv_libevent_dir != "(system)"; then
--  if test -d "$ac_cv_libevent_dir/lib" ; then
--    LDFLAGS="-L$ac_cv_libevent_dir/lib $LDFLAGS"
--    le_libdir="$ac_cv_libevent_dir/lib"
--  else
--    LDFLAGS="-L$ac_cv_libevent_dir $LDFLAGS"
--    le_libdir="$ac_cv_libevent_dir"
--  fi
--  if test -d "$ac_cv_libevent_dir/include" ; then
--    CPPFLAGS="-I$ac_cv_libevent_dir/include $CPPFLAGS"
--  else
--    CPPFLAGS="-I$ac_cv_libevent_dir $CPPFLAGS"
--  fi
--fi
-+PKG_CHECK_MODULES([LIBEVENT], [libevent])
- 
- trylibssldir=""
- AC_ARG_WITH(libssl,
-@@ -478,14 +377,14 @@ dnl ************************************
- AC_DEFUN([AC_HAVE_SASL_CALLBACK_FT],
- [AC_CACHE_CHECK(for sasl_callback_ft, ac_cv_has_sasl_callback_ft,
- [
--  AC_TRY_COMPILE([
-+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-     #ifdef HAVE_SASL_SASL_H
-     #include <sasl/sasl.h>
-     #include <sasl/saslplug.h>
-     #endif
--  ],[
-+  ]], [[
-     sasl_callback_ft a_callback;
--  ],[
-+  ]])],[
-     ac_cv_has_sasl_callback_ft=yes
-   ],[
-     ac_cv_has_sasl_callback_ft=no
-@@ -507,18 +406,15 @@ AC_DEFUN([AC_C_DETECT_UINT64_SUPPORT],
- [
-     AC_CACHE_CHECK([for print macros for integers (C99 section 7.8.1)],
-         [ac_cv_c_uint64_support],
--        [AC_TRY_COMPILE(
--            [
-+        [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
- #ifdef HAVE_INTTYPES_H
- #include <inttypes.h>
- #endif
- #include <stdio.h>
--            ], [
-+            ]], [[
-   uint64_t val = 0;
-   fprintf(stderr, "%" PRIu64 "\n", val);
--            ],
--            [ ac_cv_c_uint64_support=yes ],
--            [ ac_cv_c_uint64_support=no ])
-+            ]])],[ ac_cv_c_uint64_support=yes ],[ ac_cv_c_uint64_support=no ])
-         ])
- ])
- 
-@@ -537,12 +433,12 @@ dnl Check if the type socklen_t is defin
- AC_DEFUN([AC_C_SOCKLEN_T],
- [AC_CACHE_CHECK(for socklen_t, ac_cv_c_socklen_t,
- [
--  AC_TRY_COMPILE([
-+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-     #include <sys/types.h>
-     #include <sys/socket.h>
--  ],[
-+  ]], [[
-     socklen_t foo;
--  ],[
-+  ]])],[
-     ac_cv_c_socklen_t=yes
-   ],[
-     ac_cv_c_socklen_t=no
-@@ -581,35 +477,6 @@ fi
- 
- AC_C_ENDIAN
- 
--AC_DEFUN([AC_C_HTONLL],
--[
--    AC_MSG_CHECKING([for htonll])
--    have_htoll="no"
--    AC_TRY_LINK([
--#include <sys/types.h>
--#include <netinet/in.h>
--#ifdef HAVE_INTTYPES_H
--#include <inttypes.h> */
--#endif
--       ], [
--          return htonll(0);
--       ], [
--          have_htoll="yes"
--          AC_DEFINE([HAVE_HTONLL], [1], [Have ntohll])
--    ], [
--          have_htoll="no"
--    ])
--
--    AC_MSG_RESULT([$have_htoll])
--])
--
--AC_C_HTONLL
--
--dnl Check whether the user's system supports pthread
--AC_SEARCH_LIBS(pthread_create, pthread)
--if test "x$ac_cv_search_pthread_create" = "xno"; then
--  AC_MSG_ERROR([Can't enable threads without the POSIX thread library.])
--fi
- 
- AC_CHECK_FUNCS(mlockall)
- AC_CHECK_FUNCS(getpagesizes)
-@@ -670,13 +537,13 @@ dnl These were added in 4.1.2, but 32bit
- dnl lacks testable defines.
- have_gcc_atomics=no
- AC_MSG_CHECKING(for GCC atomics)
--AC_TRY_LINK([],[
-+AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
-   unsigned short a;
-   unsigned short b;
-   b = __sync_add_and_fetch(&a, 1);
-   b = __sync_sub_and_fetch(&a, 2);
--  ],[have_gcc_atomics=yes
--  AC_DEFINE(HAVE_GCC_ATOMICS, 1, [GCC Atomics available])])
-+  ]])],[have_gcc_atomics=yes
-+  AC_DEFINE(HAVE_GCC_ATOMICS, 1, [GCC Atomics available])],[])
- AC_MSG_RESULT($have_gcc_atomics)
- 
- dnl Check for usage of 64bit atomics
-@@ -758,29 +625,5 @@ AM_CONDITIONAL([BUILD_SPECIFICATIONS],
-                [test "x$enable_docs" != "xno" -a "x$XML2RFC" != "xno" -a 
"x$XSLTPROC" != "xno"])
- 
+From 5174ef33576f461d43f43b2019f5e10655b4c78f Mon Sep 17 00:00:00 2001
+From: dormando <dorma...@rydia.net>
+Date: Wed, 25 Mar 2020 14:02:11 -0700
+Subject: [PATCH] restart: fix rare segfault on shutdown
+
+Client connections were being closed and cleaned up after worker
+threads exit. In 2018 a patch went in to have the worker threads
+actually free their event base when stopped. If your system is strict
+enough (which is apparently none out of the dozen+ systems we've tested
+against!) it will segfault on invalid memory.
+
+This change leaves the workers hung while they wait for connections to
+be centrally closed. I would prefer to have each worker thread close
+its own connections for speed if nothing else, but we still need to
+close the listener connections and any connections currently open in
+side channels.
+
+Much apprecation to darix for helping narrow this down, as it presented
+as a wiped stack that only appeared in a specific build environment on
+a specific linux distribution.
+
+Hopefully with all of the valgrind noise fixes lately we can start
+running it more regularly and spot these early.
+---
+ memcached.c | 19 ++++++++++++-------
+ memcached.h |  3 +--
+ thread.c    | 14 ++++++++++++++
+ 3 files changed, 27 insertions(+), 9 deletions(-)
+
+diff --git a/memcached.c b/memcached.c
+index 2592b3f94..dd52dd04c 100644
+--- a/memcached.c
++++ b/memcached.c
+@@ -939,6 +939,18 @@ static void conn_close(conn *c) {
+     return;
+ }
+ 
++// Since some connections might be off on side threads and some are managed as
++// listeners we need to walk through them all from a central point.
++// Must be called with all worker threads hung or in the process of closing.
++void conn_close_all(void) {
++    int i;
++    for (i = 0; i < max_fds; i++) {
++        if (conns[i] && conns[i]->state != conn_closed) {
++            conn_close(conns[i]);
++        }
++    }
++}
++
+ /**
+  * Convert a state name to a human readable form.
+  */
+@@ -10126,13 +10138,6 @@ int main (int argc, char **argv) {
+ 
+     fprintf(stderr, "Gracefully stopping\n");
+     stop_threads();
+-    int i;
+-    // FIXME: make a function callable from threads.c
+-    for (i = 0; i < max_fds; i++) {
+-        if (conns[i] && conns[i]->state != conn_closed) {
+-            conn_close(conns[i]);
+-        }
+-    }
+     if (memory_file != NULL) {
+         restart_mmap_close();
+     }
+diff --git a/memcached.h b/memcached.h
+index a3ddd88c1..bdc38bd9c 100644
+--- a/memcached.h
++++ b/memcached.h
+@@ -820,9 +820,8 @@ enum delta_result_type add_delta(conn *c, const char *key,
+                                  const int64_t delta, char *buf,
+                                  uint64_t *cas);
+ void accept_new_conns(const bool do_accept);
+-conn *conn_from_freelist(void);
+-bool  conn_add_to_freelist(conn *c);
+ void  conn_close_idle(conn *c);
++void  conn_close_all(void);
+ item *item_alloc(char *key, size_t nkey, int flags, rel_time_t exptime, int 
nbytes);
+ #define DO_UPDATE true
+ #define DONT_UPDATE false
+diff --git a/thread.c b/thread.c
+index ed9765a48..e7f96dcba 100644
+--- a/thread.c
++++ b/thread.c
+@@ -204,6 +204,7 @@ void stop_threads(void) {
+     if (settings.verbose > 0)
+         fprintf(stderr, "asking workers to stop\n");
+     buf[0] = 's';
++    pthread_mutex_lock(&worker_hang_lock);
+     pthread_mutex_lock(&init_lock);
+     init_count = 0;
+     for (i = 0; i < settings.num_threads; i++) {
+@@ -215,6 +216,8 @@ void stop_threads(void) {
+     wait_for_thread_registration(settings.num_threads);
+     pthread_mutex_unlock(&init_lock);
  
--dnl Let the compiler be a bit more picky. Please note that you cannot
--dnl specify these flags to the compiler before AC_CHECK_FUNCS, because
--dnl the test program will generate a compilation warning and hence fail
--dnl to detect the function ;-)
--if test "$ICC" = "yes"
--then
--   dnl ICC trying to be gcc.
--   CFLAGS="$CFLAGS -diag-disable 187 -Wall -Werror"
--   AC_DEFINE([_GNU_SOURCE],[1],[find sigignore on Linux])
--elif test "$GCC" = "yes"
--then
--  GCC_VERSION=`$CC -dumpversion`
--  CFLAGS="$CFLAGS -Wall -Werror -pedantic -Wmissing-prototypes 
-Wmissing-declarations -Wredundant-decls"
--  case $GCC_VERSION in
--    4.4.*)
--    CFLAGS="$CFLAGS -fno-strict-aliasing"
--    ;;
--  esac
--  AC_DEFINE([_GNU_SOURCE],[1],[find sigignore on Linux])
--elif test "$SUNCC" = "yes"
--then
--  CFLAGS="$CFLAGS -errfmt=error -errwarn -errshort=tags"
--fi
--
- AC_CONFIG_FILES(Makefile doc/Makefile)
- AC_OUTPUT
-Index: memcached-1.5.17/Makefile.am
-===================================================================
---- memcached-1.5.17.orig/Makefile.am  2019-08-28 00:17:56.000000000 +0200
-+++ memcached-1.5.17/Makefile.am       2019-09-03 11:45:07.724581146 +0200
-@@ -1,3 +1,6 @@
-+AM_CFLAGS = -pthread -Wall -Wmissing-prototypes -Wmissing-declarations 
-Wredundant-decls
-+AM_CPPFLAGS = -include $(top_builddir)/config.h
++    // All of the workers are hung but haven't done cleanup yet.
 +
- bin_PROGRAMS = memcached
- pkginclude_HEADERS = protocol_binary.h
- noinst_PROGRAMS = memcached-debug sizes testapp timedrun
-@@ -63,11 +66,12 @@ memcached_SOURCES += tls.c tls.h
- endif
+     if (settings.verbose > 0)
+         fprintf(stderr, "asking background threads to stop\n");
  
- memcached_debug_SOURCES = $(memcached_SOURCES)
--memcached_CPPFLAGS = -DNDEBUG
--memcached_debug_LDADD = @PROFILER_LDFLAGS@
--memcached_debug_CFLAGS = @PROFILER_FLAGS@
-+memcached_CPPFLAGS = $(AM_CPPFLAGS) -DNDEBUG
-+memcached_debug_LDADD = @PROFILER_LDFLAGS@ $(LIBEVENT_LIBS)
-+memcached_debug_CFLAGS = @PROFILER_FLAGS@ $(AM_CFLAGS)
-+memcached_debug_CPPFLAGS = $(AM_CPPFLAGS)
+@@ -236,6 +239,17 @@ void stop_threads(void) {
+     if (settings.verbose > 0)
+         fprintf(stderr, "stopped idle timeout thread\n");
+ 
++    // Close all connections then let the workers finally exit.
++    if (settings.verbose > 0)
++        fprintf(stderr, "closing connections\n");
++    conn_close_all();
++    pthread_mutex_unlock(&worker_hang_lock);
++    if (settings.verbose > 0)
++        fprintf(stderr, "reaping worker threads\n");
++    for (i = 0; i < settings.num_threads; i++) {
++        pthread_join(threads[i].thread_id, NULL);
++    }
++
+     if (settings.verbose > 0)
+         fprintf(stderr, "all background threads stopped\n");
  
--memcached_LDADD =
-+memcached_LDADD = $(LIBEVENT_LIBS)
- memcached_DEPENDENCIES =
- memcached_debug_DEPENDENCIES =
- CLEANFILES=

++++++ memcached-1.5.17.tar.gz -> memcached-1.6.2.tar.gz ++++++
++++ 16868 lines of diff (skipped)


Reply via email to