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);
{
// 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;