summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2015-02-17 19:15:22 +0100
committerAnatol Belski <ab@php.net>2015-02-17 19:15:22 +0100
commitd428bf2d4edab232690b64977aaf0a3b15585843 (patch)
treee5526767b0e19835dde1054b4c2c7bbfa246a3c1
parent31287f0317981ccd4ce38a6e0e128c6504fb1101 (diff)
downloadphp-git-d428bf2d4edab232690b64977aaf0a3b15585843.tar.gz
improve debugability in TS debug builds
gdb seems to be not always able to fetch the correct context for thread locals. Thus, the "if (TSRMLS_CACHE)" clause causes gdb to show crashes which aren't recognized neither with helgrind nor in release builds. This is reproducable by setting breakpoints on the exact line where PHP has a tsrm_get_ls_cache() call.
-rw-r--r--TSRM/TSRM.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/TSRM/TSRM.h b/TSRM/TSRM.h
index cdb6e87a22..859b3fac01 100644
--- a/TSRM/TSRM.h
+++ b/TSRM/TSRM.h
@@ -170,7 +170,11 @@ TSRM_API void *tsrm_get_ls_cache(void);
#define TSRMG_STATIC(id, type, element) (((type) (*((void ***) TSRMLS_CACHE))[TSRM_UNSHUFFLE_RSRC_ID(id)])->element)
#define TSRMLS_CACHE_EXTERN() extern TSRM_TLS void *TSRMLS_CACHE
#define TSRMLS_CACHE_DEFINE() TSRM_TLS void *TSRMLS_CACHE = NULL
+#if ZEND_DEBUG
+#define TSRMLS_CACHE_UPDATE() TSRMLS_CACHE = tsrm_get_ls_cache()
+#else
#define TSRMLS_CACHE_UPDATE() if (!TSRMLS_CACHE) TSRMLS_CACHE = tsrm_get_ls_cache()
+#endif
#define TSRMLS_CACHE _tsrm_ls_cache
/* BC only */