From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 66337 invoked by alias); 23 Dec 2017 22:31:46 -0000 Mailing-List: contact elfutils-devel-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Post: List-Help: List-Subscribe: Sender: elfutils-devel-owner@sourceware.org Received: (qmail 66316 invoked by uid 89); 23 Dec 2017 22:31:45 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Checked: by ClamAV 0.99.2 on sourceware.org X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY autolearn=ham version=3.3.2 spammy=U*mark X-Spam-Status: No, score=-25.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY autolearn=ham version=3.3.2 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on sourceware.org X-Spam-Level: X-HELO: gnu.wildebeest.org Received: from wildebeest.demon.nl (HELO gnu.wildebeest.org) (212.238.236.112) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 23 Dec 2017 22:31:43 +0000 Received: from stream.wildebeest.org (deer0x13.wildebeest.org [172.31.17.149]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by gnu.wildebeest.org (Postfix) with ESMTPSA id 2C65032B90E2; Sat, 23 Dec 2017 23:31:39 +0100 (CET) Received: by stream.wildebeest.org (Postfix, from userid 1000) id 59219FFBEC; Sat, 23 Dec 2017 23:31:47 +0100 (CET) From: Mark Wielaard To: elfutils-devel@sourceware.org Cc: Mark Wielaard Subject: [PATCH] tests: Try to use coredumpctl to extract core files. Date: Sat, 23 Dec 2017 22:31:00 -0000 Message-Id: <20171223223142.19835-1-mark@klomp.org> X-Mailer: git-send-email 2.14.3 X-Spam-Flag: NO X-IsSubscribed: yes X-SW-Source: 2017-q4/txt/msg00122.txt.bz2 If systemd-coredump is installed we have to use coredumpctl to extract the core file to test. Unfortunately systemd-coredump/coredumpctl seem to be somewhat fragile if multiple core dumps are generated/extracted at the same time. So use a lock file to only run one core dump test at a time (under make -j). Signed-off-by: Mark Wielaard --- tests/ChangeLog | 5 +++++ tests/backtrace-subr.sh | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index e16a3d04..c70d7abd 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2017-12-23 Mark Wielaard + + * backtrace-subr.sh (check_native_core): Use a lock file and try + to extract core using coredumpctl. + 2017-12-11 Dima Kogan * run-aggregate-size.sh: Added check for multi-dimensional arrays. diff --git a/tests/backtrace-subr.sh b/tests/backtrace-subr.sh index c1f31569..e04a7ea6 100644 --- a/tests/backtrace-subr.sh +++ b/tests/backtrace-subr.sh @@ -137,19 +137,46 @@ check_native() # Backtrace core file. check_native_core() { +# systemd-coredump/coredumpctl doesn't seem to like concurrent core dumps +# use a lock file (fd 200) tests/core-dump-backtrace.lock +( child=$1 # Disable valgrind while dumping core. SAVED_VALGRIND_CMD="$VALGRIND_CMD" unset VALGRIND_CMD + # Wait for lock for 10 seconds or skip. + flock -x -w 10 200 || exit 77; + # Skip the test if we cannot adjust core ulimit. - core="core.`ulimit -c unlimited || exit 77; set +ex; testrun ${abs_builddir}/$child --gencore; true`" + pid="`ulimit -c unlimited || exit 77; set +ex; testrun ${abs_builddir}/$child --gencore; true`" + core="core.$pid" # see if /proc/sys/kernel/core_uses_pid is set to 0 if [ -f core ]; then mv core "$core" fi - if [ ! -f "$core" ]; then echo "No $core file generated"; exit 77; fi + type -P coredumpctl && have_coredumpctl=1 || have_coredumpctl=0 + if [ ! -f "$core" -a $have_coredumpctl -eq 1 ]; then + # Maybe systemd-coredump took it. But give it some time to dump first... + sleep 1 + coredumpctl --output="$core" dump $pid || rm -f $core + + # Try a couple of times after waiting some more if something went wrong... + if [ ! -f "$core" ]; then + sleep 2 + coredumpctl --output="$core" dump $pid || rm -f $core + fi + + if [ ! -f "$core" ]; then + sleep 3 + coredumpctl --output="$core" dump $pid || rm -f $core + fi + fi + if [ ! -f "$core" ]; then + echo "No $core file generated"; + exit 77; + fi if [ "x$SAVED_VALGRIND_CMD" != "x" ]; then VALGRIND_CMD="$SAVED_VALGRIND_CMD" @@ -163,4 +190,6 @@ check_native_core() cat $core.{bt,err} check_native_unsupported $core.err $child-$core check_all $core.{bt,err} $child-$core + rm $core{,.{bt,err}} +) 200>${abs_builddir}/core-dump-backtrace.lock } -- 2.14.3