]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
sort: omit unnecessary mutex unlock+lock; simplify heap access
authorPaul R. Eggert <eggert@cs.ucla.edu>
Mon, 26 Jul 2010 03:54:55 +0000 (20:54 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 26 Jul 2010 03:55:21 +0000 (20:55 -0700)
* src/sort.c (queue_pop): Omit unnecessary unlock+lock after
pthread_cond_wait returns.  Don't access "count" member of the
heap; any efficiency gains should be quite minor, the access
complicates this code, and "count" should be private anyway.

src/sort.c

index ea2720f68ff3659aede834d9d14ef584805dad2d..577521d689c29746d67e88c0dc4d51691f102d3e 100644 (file)
@@ -3173,20 +3173,11 @@ queue_insert (struct merge_node_queue *queue, struct merge_node *node)
 static inline struct merge_node *
 queue_pop (struct merge_node_queue *queue)
 {
-  struct merge_node *node = NULL;
-
-  while (!node)
-    {
-      pthread_mutex_lock (&queue->mutex);
-      if (queue->priority_queue->count)
-        node = heap_remove_top (queue->priority_queue);
-      else
-        {
-          /* Go into conditional wait if no NODE is immediately available.  */
-          pthread_cond_wait (&queue->cond, &queue->mutex);
-        }
-      pthread_mutex_unlock (&queue->mutex);
-    }
+  struct merge_node *node;
+  pthread_mutex_lock (&queue->mutex);
+  while (! (node = heap_remove_top (queue->priority_queue)))
+    pthread_cond_wait (&queue->cond, &queue->mutex);
+  pthread_mutex_unlock (&queue->mutex);
   lock_node (node);
   node->queued = false;
   return node;