]> git.ipfire.org Git - thirdparty/coreutils.git/commit
sort: fix two threading issues reported by valgrind
authorShayan Pooya <shayan@liveve.org>
Sat, 25 Jan 2014 00:37:12 +0000 (00:37 +0000)
committerPádraig Brady <P@draigBrady.com>
Sun, 13 Jul 2014 20:09:14 +0000 (21:09 +0100)
commiteabcccc44b452605de1a531650fd4f79e1934be0
tree8e85ef6a395a3c3ec70c63d3392aa6805ff6c416
parentdbd7c9452a121f948b4eabbe22e07ad13900bc9b
sort: fix two threading issues reported by valgrind

Neither issue impacts on the correct operation of sort.
The issues were detected by both valgrind 3.8.1 and 3.9.0 using:

  seq 200000 > file.sort
  valgrind --tool=drd src/sort file.sort -o file.sort

For tool usage and error details see:
 http://valgrind.org/docs/manual/drd-manual.html

* src/sort.c (queue_insert): Unlock mutex _after_ signalling the
associated condition variable.  Valgrind flags this with:
  "Probably a race condition: condition variable 0xffeffffb0 has been
   signaled but the associated mutex 0xffeffff88 is not locked by the
   signalling thread."
The explanation at the above URL is:
  "Sending a signal to a condition variable while no lock is held on
   the mutex associated with the condition variable.  This is a common
   programming error which can cause subtle race conditions and
   unpredictable behavior."
This should at least give more defined scheduling behavior.

(merge_tree_destroy): Make symmetrical with merge_tree_init() thus
destroying the correct mutex.  Valgrind flags this with:
  "The object at address 0x5476cf8 is not a mutex."
src/sort.c