[PATCH, libstdc++] Improve slightly __cxa_guard_acquire

Jakub Jelinek jakub@redhat.com
Tue Sep 11 15:04:00 GMT 2012


On Thu, Sep 06, 2012 at 11:10:37PM +0200, Jakub Jelinek wrote:
> > +	    int expected(0);
> >  	    if (__atomic_compare_exchange_n(gi, &expected, pending_bit, false,
> >  					    __ATOMIC_ACQ_REL,
> >  					    __ATOMIC_RELAXED))
> 
> Shouldn't this __ATOMIC_RELAXED be also __ATOMIC_ACQUIRE?  If expected ends
> up being guard_bit, then the code will return 0; right away.

Here is a patch for that.  Ok for trunk/4.7?

2012-09-11  Jakub Jelinek  <jakub@redhat.com>

	PR libstdc++/54172
	* libsupc++/guard.cc (__cxa_guard_acquire): Fix up the last
	argument of the first __atomic_compare_exchange_n.

--- libstdc++-v3/libsupc++/guard.cc.jj	2012-09-11 16:55:16.000000000 +0200
+++ libstdc++-v3/libsupc++/guard.cc	2012-09-11 16:56:38.035848876 +0200
@@ -253,7 +253,7 @@ namespace __cxxabiv1
 	    int expected(0);
 	    if (__atomic_compare_exchange_n(gi, &expected, pending_bit, false,
 					    __ATOMIC_ACQ_REL,
-					    __ATOMIC_RELAXED))
+					    __ATOMIC_ACQUIRE))
 	      {
 		// This thread should do the initialization.
 		return 1;

	Jakub



More information about the Libstdc++ mailing list