Skip to content

Commit c754437

Browse files
align with bionic
1 parent 79d9ea2 commit c754437

File tree

3 files changed

+5
-5
lines changed

3 files changed

+5
-5
lines changed

libc/src/__support/threads/thread.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ void call_atexit_callbacks(ThreadAttributes *attrib) {
166166
}
167167
}
168168

169-
void call_atexit_callbacks() { call_atexit_callbacks(self.attrib); }
169+
extern "C" void __cxa_thread_finalize() { call_atexit_callbacks(self.attrib); }
170170

171171
} // namespace internal
172172

libc/src/stdlib/atexit.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,6 @@ int __cxa_atexit(AtExitCallback *callback, void *payload, void *) {
3030

3131
void __cxa_finalize(void *dso) {
3232
if (!dso) {
33-
// cxa callback also need to handle local static destructors.
34-
// see
35-
// https://refspecs.linuxbase.org/LSB_4.0.0/LSB-Core-generic/LSB-Core-generic/baselib---cxa-finalize.html
36-
internal::call_atexit_callbacks();
3733
call_exit_callbacks(atexit_callbacks);
3834
if (teardown_main_tls)
3935
teardown_main_tls();

libc/src/stdlib/exit.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,12 @@
1414
namespace LIBC_NAMESPACE_DECL {
1515

1616
extern "C" void __cxa_finalize(void *);
17+
extern "C" [[gnu::weak]] void __cxa_thread_finalize();
1718

19+
// TODO: use recursive mutex to protect this routine.
1820
[[noreturn]] LLVM_LIBC_FUNCTION(void, exit, (int status)) {
21+
if (__cxa_thread_finalize)
22+
__cxa_thread_finalize();
1923
__cxa_finalize(nullptr);
2024
internal::exit(status);
2125
}

0 commit comments

Comments
 (0)