On Oct 21, 2013, at 2:12 PM, Leonard Crestez <[email protected]> wrote:
> When using LinuxThreads pthread_setspecific triggers recursive allocation on 
> all threads. Work around this by creating a global linked list of in-progress 
> tsd initializations.
> 
> This modifies the _tsd_get_wrapper macro-generated function. When it has
> to initialize an TSD object it will push the item to the linked list
> first. If this causes a recursive allocation then the _get_wrapper
> request is satisfied from the list. When pthread_setspecific returns the item 
> is removed from the list.
> 
> This effectively adds a very poor substitute for real TLS used only
> during pthread_setspecific allocation recursion.
> 
> Signed-off-by: Crestez Dan Leonard <[email protected]>
> ---
>  include/jemalloc/internal/tsd.h | 63 
> +++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 63 insertions(+)

I don't see how this code can work.  It stack-allocates block (struct 
tsd_init_block block;), then permanently links it into a ring.  There are other 
less critical issues (e.g. no cleanup during thread exit, using pthread_mutex_t 
rather than malloc_mutex_t, and coding style conformance), but let's worry 
first about whether there's a feasible way to restructure the initialization 
code.

Thanks,
Jason
_______________________________________________
jemalloc-discuss mailing list
[email protected]
http://www.canonware.com/mailman/listinfo/jemalloc-discuss

Reply via email to