Debugging further, I noticed that the gl android dispatcher table uses a fixed TLS slot ( slot 6 - offset #24 bytes).
The gnu linker/glibc libraries are not aware of this, so collisions can occur when using std::async or other c++11 constructs which uses thread local storage, which is why allocating dummy thread_local variables helps, since it pushes the slots used by std::async and others away from stomping over slot 6.
I don't think this can be solved in libhybris, short of rewriting the complete android gl dispatcher table.
Debugging further, I noticed that the gl android dispatcher table uses a fixed TLS slot ( slot 6 - offset #24 bytes).
The gnu linker/glibc libraries are not aware of this, so collisions can occur when using std::async or other c++11 constructs which uses thread local storage, which is why allocating dummy thread_local variables helps, since it pushes the slots used by std::async and others away from stomping over slot 6.
I don't think this can be solved in libhybris, short of rewriting the complete android gl dispatcher table.