EricWF added a comment.

We can perform far fewer calls to `pthread_getspecific`/`pthread_setspecific` 
if we represent the list head using a global `__thread DtorList* list_head = 
nullptr`.
This also allows us to avoid the hack of setting/unsetting the key during 
`run_dtors()` which I really do not like.

Here is a patch that applies such changes: 
https://gist.github.com/EricWF/a071376b1216aabdd1695eec2175c374

What do you think of this idea?


================
Comment at: src/cxa_thread_atexit.cpp:42
@@ +41,3 @@
+  // - thread_local destructors on other threads run on the first iteration
+  //   through the pthread_key destructors.  std::notify_all_at_thread_exit()
+  //   and similar functions must be careful to wait until the second iteration
----------------
Can you clarify what you mean by "other threads"?

How is libc++ supposed to detect and handle this problem? 


https://reviews.llvm.org/D21803



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to