]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - libstdc++-v3/libsupc++/eh_throw.cc
Re-instate last patch...
[thirdparty/gcc.git] / libstdc++-v3 / libsupc++ / eh_throw.cc
index 5887f26e9bb8095c9a24ce35fa5e221e7b2e2c05..198ff181035bf103628c85f02e798e28b3797e60 100644 (file)
@@ -46,7 +46,7 @@ __gxx_exception_cleanup (_Unwind_Reason_Code code, _Unwind_Exception *exc)
   if (code != _URC_FOREIGN_EXCEPTION_CAUGHT && code != _URC_NO_REASON)
     __terminate (header->terminateHandler);
 
-  if (__sync_sub_and_fetch (&header->referenceCount, 1) == 0)
+  if (__gnu_cxx::__exchange_and_add_dispatch (&header->referenceCount, -1) == 0)
     {
       if (header->exceptionDestructor)
         header->exceptionDestructor (header + 1);
@@ -62,7 +62,7 @@ __cxxabiv1::__cxa_throw (void *obj, std::type_info *tinfo,
 {
   // Definitely a primary.
   __cxa_exception *header = __get_exception_header_from_obj (obj);
-  header->referenceCount = 1;
+  header->referenceCount = 0;
   header->exceptionType = tinfo;
   header->exceptionDestructor = dest;
   header->unexpectedHandler = __unexpected_handler;