GNU bug report logs -
#6729
[PATCH] sort: omit unnecessary mutex unlock+lock; simplify heap access
Previous Next
Reported by: Paul Eggert <eggert <at> CS.UCLA.EDU>
Date: Mon, 26 Jul 2010 03:58:01 UTC
Severity: normal
Tags: patch
Done: Pádraig Brady <P <at> draigBrady.com>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your message dated Mon, 26 Jul 2010 10:53:25 +0100
with message-id <4C4D5B15.4040303 <at> draigBrady.com>
and subject line Re: bug#6729: [PATCH] sort: omit unnecessary mutex unlock+lock; simplify heap access
has caused the GNU bug report #6729,
regarding [PATCH] sort: omit unnecessary mutex unlock+lock; simplify heap access
to be marked as done.
(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)
--
6729: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=6729
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
This removes an unnecessary mutex lock+unlock
and prepares for a refactoring patch to heap.c that I'll
install shortly.
From 7cc2429f13db9b0b70572ac1879506f4e444f4c6 Mon Sep 17 00:00:00 2001
From: Paul R. Eggert <eggert <at> cs.ucla.edu>
Date: Sun, 25 Jul 2010 20:54:55 -0700
Subject: [PATCH] sort: omit unnecessary mutex unlock+lock; simplify heap access
* 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 | 19 +++++--------------
1 files changed, 5 insertions(+), 14 deletions(-)
diff --git a/src/sort.c b/src/sort.c
index ea2720f..577521d 100644
--- a/src/sort.c
+++ b/src/sort.c
@@ -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;
--
1.7.1
[Message part 3 (message/rfc822, inline)]
On 26/07/10 04:57, Paul Eggert wrote:
> This removes an unnecessary mutex lock+unlock
> and prepares for a refactoring patch to heap.c that I'll
> install shortly.
closing...
thanks,
Pádraig.
This bug report was last modified 14 years and 308 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.