shuf --repeat no longer dumps core if the input is empty.
[bug introduced with the --repeat feature in coreutils-8.22]
+ sort when using multiple threads now avoids undefined behavior with mutex
+ destruction, which could cause deadlocks on some implementations.
+ [bug introduced in coreutils-8.6]
+
tail -f now uses polling mode for VXFS to cater for its clustered mode.
[bug introduced with inotify support added in coreutils-7.5]
/* Destroy the merge tree. */
static void
-merge_tree_destroy (struct merge_node *merge_tree)
+merge_tree_destroy (size_t nthreads, struct merge_node *merge_tree)
{
- struct merge_node *root = merge_tree;
- pthread_mutex_destroy (&root->lock);
+ size_t n_nodes = nthreads * 2;
+ struct merge_node *node = merge_tree;
+
+ while (n_nodes--)
+ {
+ pthread_mutex_destroy (&node->lock);
+ node++;
+ }
+
free (merge_tree);
}
queue_insert (queue, node);
merge_loop (queue, total_lines, tfp, temp_output);
}
-
- pthread_mutex_destroy (&node->lock);
}
/* Scan through FILES[NTEMPS .. NFILES-1] looking for files that are
queue_init (&queue, nthreads);
struct merge_node *merge_tree =
merge_tree_init (nthreads, buf.nlines, line);
- struct merge_node *root = merge_tree + 1;
- sortlines (line, nthreads, buf.nlines, root,
+ sortlines (line, nthreads, buf.nlines, merge_tree + 1,
&queue, tfp, temp_output);
+
+#ifdef lint
+ merge_tree_destroy (nthreads, merge_tree);
queue_destroy (&queue);
- merge_tree_destroy (merge_tree);
+#endif
}
else
write_unique (line - 1, tfp, temp_output);