Commit 16a1d8fe by Jason Merrill Committed by Jason Merrill

re PR libstdc++/57914 (Memory leak in __cxa_thread_atexit when using thread_local)

	PR libstdc++/57914
	* libsupc++/atexit_thread.cc (run): Delete cleanup elts.

From-SVN: r201146
parent fb414939
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
......
......@@ -58,8 +58,13 @@ namespace {
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.
......@@ -67,9 +72,15 @@ namespace {
{
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);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment