PR libstdc++/57914
* libsupc++/atexit_thread.cc (run): Delete cleanup elts.
From-SVN: r201146
+2013-07-22 Jason Merrill <jason@redhat.com>
+
+ PR libstdc++/57914
+ * libsupc++/atexit_thread.cc (run): Delete cleanup elts.
+
2013-07-22 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/57920
void run (void *p)
{
elt *e = static_cast<elt*>(p);
- for (; e; e = e->next)
- e->destructor (e->object);
+ while (e)
+ {
+ elt *old_e = e;
+ e->destructor (e->object);
+ e = e->next;
+ delete (old_e);
+ }
}
// Run the stack of cleanups for the current thread.
{
void *e;
if (__gthread_active_p ())
- e = __gthread_getspecific (key);
+ {
+ e = __gthread_getspecific (key);
+ __gthread_setspecific (key, NULL);
+ }
else
- e = single_thread;
+ {
+ e = single_thread;
+ single_thread = NULL;
+ }
run (e);
}