On Mon, Jan 13, 2014 at 7:31 PM, Pádraig Brady <[email protected]> wrote:

> On 01/14/2014 12:22 AM, Shayan Pooya wrote:
> > Valgrind reported two race conditions when I ran sort on a small file.
> > Both of them seem to be legitimate.
> > ---
> >  src/sort.c | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/src/sort.c b/src/sort.c
> > index 3380be6..e6658e6 100644
> > --- a/src/sort.c
> > +++ b/src/sort.c
> > @@ -3354,8 +3354,8 @@ queue_insert (struct merge_node_queue *queue,
> struct merge_node *node)
> >    pthread_mutex_lock (&queue->mutex);
> >    heap_insert (queue->priority_queue, node);
> >    node->queued = true;
> > -  pthread_mutex_unlock (&queue->mutex);
> >    pthread_cond_signal (&queue->cond);
> > +  pthread_mutex_unlock (&queue->mutex);
> >  }
> >
> >  /* Pop the top node off the priority QUEUE, lock the node, return it.
>  */
> > @@ -3950,7 +3950,7 @@ sort (char *const *files, size_t nfiles, char
> const *output_file,
> >                sortlines (line, nthreads, buf.nlines, root,
> >                           &queue, tfp, temp_output);
> >                queue_destroy (&queue);
> > -              pthread_mutex_destroy (&root->lock);
> > +              pthread_mutex_destroy (&merge_tree->lock);
> >                merge_tree_destroy (merge_tree);
> >              }
> >            else
>
> Hi, what version of valgrind, command line options,
> and sort input files did you use.
>
> thanks,
> Pádraig.
>


Hello,

Valgrind 3.9
The input is the output of: seq 1000 > ~/1K
The command line options: none:
$ valgrind --tool=drd ./coreutils/src/srot ~/1K -o ~/1K

There are some other race conditions reported by DRD for larger files (1M
lines) that I am investigating.

P.S.
I am tracking down this issue: http://stackoverflow.com/q/21099839/830681

Regards.

Reply via email to