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)