From 5b37b3cff142f82c47dbdc41dc11f2ef122294ac Mon Sep 17 00:00:00 2001 From: Simon Atanasyan Date: Thu, 23 Oct 2014 11:35:00 -0700 Subject: [PATCH] Fix intermittent failures of Lrs-race test case After the following change the Lrs-race test case starts to intermittently fails: eac65dc Add basic support for the QNX operating system When we include "config.h" into the "libunwind_i.h" we undefine the HAVE___THREAD macro in a few lines below in #include "config.h" pragma. The change eac65dc includes "config.h" into the "dwarf.h" but forgets to undefine HAVE___THREAD. So now this macro has inconsistent state among the code. Somewhere it is defined, somewhere not. In particular it becomes defined in the mi/Gset_caching_policy.c and we do not replace UNW_CACHE_PER_THREAD caching policy by the UNW_CACHE_GLOBAL. The fix is rather dirty. It adds the code to undefine HAVE___THREAD in the "dwarf.h" like we do that in the "libunwind_i.h". Probably the ideal solution should fix per-thread caching implementation or turned it off at all on platforms where it is not completely and correctly supported. Signed-off-by: Simon Atanasyan --- include/dwarf.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/include/dwarf.h b/include/dwarf.h index 71e9df60..169f739e 100644 --- a/include/dwarf.h +++ b/include/dwarf.h @@ -37,6 +37,13 @@ struct elf_dyn_info; # include "config.h" #endif +#ifdef HAVE___THREAD + /* For now, turn off per-thread caching. It uses up too much TLS + memory per thread even when the thread never uses libunwind at + all. */ +# undef HAVE___THREAD +#endif + #ifndef UNW_REMOTE_ONLY #if defined(HAVE_LINK_H) #include