defer free of thread-local dlerror buffers from inconsistent context
authorRich Felker <dalias@aerifal.cx>
Fri, 15 Feb 2019 19:20:49 +0000 (14:20 -0500)
committerRich Felker <dalias@aerifal.cx>
Fri, 15 Feb 2019 19:20:49 +0000 (14:20 -0500)
commitaa5a9d15e09851f7b4a1668e9dbde0f6234abada
tree1076c36326a4f74ae9b98ca997c5bbb144289a04
parentb2020571f07beaa9873ef0e5ade456b57b589042
defer free of thread-local dlerror buffers from inconsistent context

__dl_thread_cleanup is called from the context of an exiting thread
that is not in a consistent state valid for calling application code.
since commit c9f415d7ea2dace5bf77f6518b6afc36bb7a5732, it's possible
(and supported usage) for the allocator to have been replaced by the
application, so __dl_thread_cleanup can no longer call free. instead,
reuse the message buffer as a linked-list pointer, and queue it to be
freed the next time any dynamic linker error message is generated.
src/ldso/dlerror.c