[PATCH] D21803: [libcxxabi] Provide a fallback __cxa_thread_atexit() implementation

Ben Craig via cfe-commits cfe-commits at lists.llvm.org
Thu Jun 30 06:44:09 PDT 2016


bcraig added a comment.

In http://reviews.llvm.org/D21803#470564, @joerg wrote:

> On the topic of __cxa_thread_atexit, was it ever specified how it interacts with things like thread cancellation?


I don't think it's officially specified anywhere.  C++ threads don't have a cancel method.  The POSIX spec doesn't speak about the C++ ABI.  The Itanium ABI could talk about this, but hasn't yet.

I think this implementation does the right thing with regards to cancellation though.  POSIX says that first cancellation cleanup handlers are called, then thread-specific data destructors are called.  pthread_cancel is still a really bad idea due to how it (doesn't) interact with RAII, but at least TLS data won't get leaked.


================
Comment at: src/cxa_thread_atexit.cpp:46
@@ +45,3 @@
+      pthread_key_delete(key_);
+    }
+
----------------
dimitry wrote:
> run_dtors() is called when/if libc++.so gets unloaded... but only for the thread calling dlclose()?
Most of the dtor magic is on the pthread_key_create side.  pthreads lets you register a per-thread destructor.

This destructor is only run on process termination (I think).


http://reviews.llvm.org/D21803





More information about the cfe-commits mailing list