[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