GNU bug report logs - #7597
multi-threaded sort can segfault (unrelated to the sort -u segfault)

Previous Next

Package: coreutils;

Reported by: Jim Meyering <jim <at> meyering.net>

Date: Thu, 9 Dec 2010 12:11:01 UTC

Severity: normal

Tags: fixed

Done: Assaf Gordon <assafgordon <at> gmail.com>

Bug is archived. No further changes may be made.

Full log


Message #35 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Jim Meyering <jim <at> meyering.net>
To: Paul Eggert <eggert <at> cs.ucla.edu>
Cc: Chen Guo <chen.guo.0625 <at> gmail.com>, bug-coreutils <at> gnu.org,
	DJ Lucas <dj <at> linuxfromscratch.org>, coreutils <at> gnu.org
Subject: Re: bug#7597: multi-threaded sort can segfault (unrelated to the sort
	-u segfault)
Date: Mon, 13 Dec 2010 08:30:44 +0100
Paul Eggert wrote:
> On 12/12/2010 07:41 AM, Jim Meyering wrote:
>> That sounds good, assuming it triggers the bug reliably for you.
>> I was hoping to find a way to reproduce it without relying on gensort,
>> but won't object if you want to do that.
>
> In my attempts to reproduce the problem, it's pretty flaky.
> I think it depends on how busy the operating system is.
> Sometimes I'd get failures all the time; sometimes, almost
> never.  (This was with valgrind; I had much less luck without
> valgrind.)
>
> Anyway, I pushed this, which seemed to work well enough
> on my host.  It prefers gensort if available, but falls
> back on seq+shuf if not.
>
> Subject: [PATCH] tests: test for access to stale thread memory
>
> * tests/misc/sort-stale-thread-mem: New tests.
> * tests/Makefile.am (TESTS): Add it.

Thank you!
I did this, too:


From 8351407f874ab3d6fc0830e78a6c234bf1583e3f Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering <at> redhat.com>
Date: Mon, 13 Dec 2010 08:07:25 +0100
Subject: [PATCH 1/2] tests: mark new test as very expensive

* tests/misc/sort-stale-thread-mem: Don't initialize fail=0 here;
that is done in init.sh.  This avoids a syntax-check failure.
Invoke "Exit $fail" at end, too.
Mark as a very expensive test.
---
 tests/misc/sort-stale-thread-mem |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/tests/misc/sort-stale-thread-mem b/tests/misc/sort-stale-thread-mem
index c4f4fcb..8ad60ed 100755
--- a/tests/misc/sort-stale-thread-mem
+++ b/tests/misc/sort-stale-thread-mem
@@ -21,7 +21,7 @@
 . "${srcdir=.}/init.sh"; path_prepend_ ../src
 print_ver_ sort

-expensive_
+very_expensive_

 valgrind --help >/dev/null || skip_ "requires valgrind"
 test "$(nproc)" = 1 && skip_ "requires a multi-core system"
@@ -36,9 +36,10 @@ test "$(nproc)" = 1 && skip_ "requires a multi-core system"
 # on some circa-2010 multicore Linux platforms.  Run the test 10 times
 # so that the probability of missing the bug should be about 1 in
 # 2**100 on these hosts.
-fail=0
 for i in $(seq 100); do
   valgrind --quiet --error-exitcode=3 \
       sort -S 100K --parallel=2 in > /dev/null ||
     { fail=$?; echo iteration $i failed; Exit $fail; }
 done
+
+Exit $fail
--
1.7.3.3.38.gc6d05


From 0c70708db7ed32d2b379116dc6bf64f07539aaf1 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering <at> redhat.com>
Date: Mon, 13 Dec 2010 08:19:12 +0100
Subject: [PATCH 2/2] tests: tweak basic-1 to use warn_ rather than literal "exit 77"

* tests/install/basic-1 (just_built_dd): Use warn_, rather than
cat and exit 77.
---
 tests/install/basic-1 |   24 ++++++------------------
 1 files changed, 6 insertions(+), 18 deletions(-)

diff --git a/tests/install/basic-1 b/tests/install/basic-1
index 5e07bab..3c45c2a 100755
--- a/tests/install/basic-1
+++ b/tests/install/basic-1
@@ -39,28 +39,16 @@ dd2=dd2$EXEEXT

 just_built_dd=$abs_top_builddir/src/$dd

-test -r "$just_built_dd" || \
-  {
-    cat 1>&2 <<EOF
-$0: WARNING!!!
-Your just-built dd binary, $just_built_dd
-is not readable, so skipping the remaining tests in this file.
-EOF
-    exit 77
-  }
+test -r "$just_built_dd" \
+  || warn_ "WARNING!!! Your just-built dd binary, $just_built_dd
+is not readable, so skipping the remaining tests in this file."

 cp "$just_built_dd" . || fail=1
 cp $dd $dd2 || fail=1

-strip $dd2 || \
-  {
-    cat 1>&2 <<EOF
-$0: WARNING!!!
-Your strip command doesn't seem to work, so skipping
-the test of install's --strip option.
-EOF
-    exit 77
-  }
+strip $dd2 \
+  || warn_ "WARNING!!! Your strip command doesn't seem to work,
+so skipping the test of install's --strip option."

 # This test would fail with 3.16s when using versions of strip that
 # don't work on read-only files (the one from binutils works fine).
--
1.7.3.3.38.gc6d05




This bug report was last modified 6 years and 285 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.