This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch, master, updated. glibc-2.10-211-g7b7f43b


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  7b7f43bed134db6a0da34282fffcbf0af10d4613 (commit)
      from  aa7492d20e5a2cef54dab7b41f534048b3eca479 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=7b7f43bed134db6a0da34282fffcbf0af10d4613

commit 7b7f43bed134db6a0da34282fffcbf0af10d4613
Author: Ulrich Drepper <drepper@redhat.com>
Date:   Sun Jul 26 13:00:04 2009 -0700

    Memory ordering in pthread_mutex_{,timed}lock.
    
    All commits should have happened before the mutex lock is taken.
    Therefore use the _rel variant of the cmpxchg atomic op.

diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index cb9ec53..2221121 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,10 @@
+2009-07-26  Ulrich Drepper  <drepper@redhat.com>
+
+	[BZ #10418]
+	* pthread_mutex_lock.c (pthread_mutex_lock): Use _rel instead of of
+	_acq variants of cmpxchg.
+	* pthread_mutex_timedlock.c (pthread_mutex_timedlock): Likewise.
+
 2009-07-23  Ulrich Drepper  <drepper@redhat.com>
 
 	* sysdeps/x86_64/configure.in: New file.
diff --git a/nptl/pthread_mutex_lock.c b/nptl/pthread_mutex_lock.c
index 406e588..a0ff881 100644
--- a/nptl/pthread_mutex_lock.c
+++ b/nptl/pthread_mutex_lock.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2007, 2008 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2007, 2008, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -160,7 +160,7 @@ __pthread_mutex_lock_full (pthread_mutex_t *mutex)
 #endif
 
 	      newval
-		= atomic_compare_and_exchange_val_acq (&mutex->__data.__lock,
+		= atomic_compare_and_exchange_val_rel (&mutex->__data.__lock,
 						       newval, oldval);
 
 	      if (newval != oldval)
@@ -285,7 +285,7 @@ __pthread_mutex_lock_full (pthread_mutex_t *mutex)
 #ifdef NO_INCR
 	newval |= FUTEX_WAITERS;
 #endif
-	oldval = atomic_compare_and_exchange_val_acq (&mutex->__data.__lock,
+	oldval = atomic_compare_and_exchange_val_rel (&mutex->__data.__lock,
 						      newval, 0);
 
 	if (oldval != 0)
@@ -420,7 +420,7 @@ __pthread_mutex_lock_full (pthread_mutex_t *mutex)
 	    oldprio = ceiling;
 
 	    oldval
-	      = atomic_compare_and_exchange_val_acq (&mutex->__data.__lock,
+	      = atomic_compare_and_exchange_val_rel (&mutex->__data.__lock,
 #ifdef NO_INCR
 						     ceilval | 2,
 #else
@@ -434,7 +434,7 @@ __pthread_mutex_lock_full (pthread_mutex_t *mutex)
 	    do
 	      {
 		oldval
-		  = atomic_compare_and_exchange_val_acq (&mutex->__data.__lock,
+		  = atomic_compare_and_exchange_val_rel (&mutex->__data.__lock,
 							 ceilval | 2,
 							 ceilval | 1);
 
@@ -445,7 +445,7 @@ __pthread_mutex_lock_full (pthread_mutex_t *mutex)
 		  lll_futex_wait (&mutex->__data.__lock, ceilval | 2,
 				  PTHREAD_MUTEX_PSHARED (mutex));
 	      }
-	    while (atomic_compare_and_exchange_val_acq (&mutex->__data.__lock,
+	    while (atomic_compare_and_exchange_val_rel (&mutex->__data.__lock,
 							ceilval | 2, ceilval)
 		   != ceilval);
 	  }
diff --git a/nptl/pthread_mutex_timedlock.c b/nptl/pthread_mutex_timedlock.c
index 8d0db79..2c6ff11 100644
--- a/nptl/pthread_mutex_timedlock.c
+++ b/nptl/pthread_mutex_timedlock.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2007, 2008 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2007, 2008, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -126,7 +126,7 @@ pthread_mutex_timedlock (mutex, abstime)
 	      int newval = id | (oldval & FUTEX_WAITERS);
 
 	      newval
-		= atomic_compare_and_exchange_val_acq (&mutex->__data.__lock,
+		= atomic_compare_and_exchange_val_rel (&mutex->__data.__lock,
 						       newval, oldval);
 	      if (newval != oldval)
 		{
@@ -246,7 +246,7 @@ pthread_mutex_timedlock (mutex, abstime)
 	      }
 	  }
 
-	oldval = atomic_compare_and_exchange_val_acq (&mutex->__data.__lock,
+	oldval = atomic_compare_and_exchange_val_rel (&mutex->__data.__lock,
 						      id, 0);
 
 	if (oldval != 0)
@@ -404,7 +404,7 @@ pthread_mutex_timedlock (mutex, abstime)
 	    oldprio = ceiling;
 
 	    oldval
-	      = atomic_compare_and_exchange_val_acq (&mutex->__data.__lock,
+	      = atomic_compare_and_exchange_val_rel (&mutex->__data.__lock,
 						     ceilval | 1, ceilval);
 
 	    if (oldval == ceilval)
@@ -413,7 +413,7 @@ pthread_mutex_timedlock (mutex, abstime)
 	    do
 	      {
 		oldval
-		  = atomic_compare_and_exchange_val_acq (&mutex->__data.__lock,
+		  = atomic_compare_and_exchange_val_rel (&mutex->__data.__lock,
 							 ceilval | 2,
 							 ceilval | 1);
 
@@ -456,7 +456,7 @@ pthread_mutex_timedlock (mutex, abstime)
 					  PTHREAD_MUTEX_PSHARED (mutex));
 		  }
 	      }
-	    while (atomic_compare_and_exchange_val_acq (&mutex->__data.__lock,
+	    while (atomic_compare_and_exchange_val_rel (&mutex->__data.__lock,
 							ceilval | 2, ceilval)
 		   != ceilval);
 	  }

-----------------------------------------------------------------------

Summary of changes:
 nptl/ChangeLog                 |    7 +++++++
 nptl/pthread_mutex_lock.c      |   12 ++++++------
 nptl/pthread_mutex_timedlock.c |   12 ++++++------
 3 files changed, 19 insertions(+), 12 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]