[cxx-abi-dev] thread_local destructors
    Dennis Handly 
    dhandly at cup.hp.com
       
    Thu Sep 20 22:26:32 UTC 2012
    
    
  
>From: Jason Merrill <jason at redhat.com>
>As discussed in N2659 it is possible to support 
>dynamic initialization in just the compiler, but for destruction we need 
>a thread-local version of atexit.  This seems to call for a new runtime 
>entry point __cxa_thread_atexit.
(Or spell it __cxa_atexit_thread.)
Also, do we need a __cxa_finalize_thread function?
And what happen when exit is called?  All existing object destroyed in order?
Do we need a new data structure that will have:
   address
   dtor
   __dso_handle
   thread_id
   next
And __cxa_finalize & __cxa_finalize_thread will know how to handle it?
(And too late to add an extra parm to __cxa_finalize.)
>The question is, do we want to try to deal with the intersection of 
>threads and shared libraries?
We should at least provide the shared lib KEY (__dso_handle) to
__cxa_thread_atexit, in case we want to try to handle it.
>If the user dlcloses a library with TLS objects that have destructors in
>multiple threads, trying to arrange for the affected threads to run the
>relevant destructors seems complex.  Are other people comfortable just
>saying "don't do that"?
Jason
Has anyone thought of a design?
Would one of the "don't do that" responses be to at least dump a list of
all of the TLS objects (addresses of object and dtor and the shlib KEY) that
are affected, before aborting?
    
    
More information about the cxx-abi-dev
mailing list