[Bug libstdc++/24025] New: libstdc++ crashes when out of memory exception thrown

geoffk at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Thu Sep 22 22:00:00 GMT 2005


In __cxa_get_globals, the code does:

      if ((g = (__cxa_eh_globals *)
           std::malloc (sizeof (__cxa_eh_globals))) == 0
          || __gthread_setspecific (globals_key, (void *) g) != 0)
        std::terminate ();

but since __cxa_get_globals is called in __cxa_allocate_exception, the effect of this is that if the first 
exception thrown in a program is an out-of-memory exception, the program will instead call 
std::terminate, because it won't be able to allocate a new __cxa_eh_globals.  std::terminate itself 
expects __cxa_get_globals to work, so it'll call itself recursively, leading to an abort() in 
__verbose_terminate_handler.

-- 
           Summary: libstdc++ crashes when out of memory exception thrown
           Product: gcc
           Version: 4.0.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: libstdc++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: geoffk at gcc dot gnu dot org
                CC: gcc-bugs at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24025



More information about the Gcc-bugs mailing list