This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ 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]

Re: [PATCH, libstdc++] Improve slightly __cxa_guard_acquire


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


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