@@ -178,15 +178,24 @@ TSRM_API bool tsrm_is_managed_thread(void);
178178#define TSRMG_FAST_STATIC (offset , type , element ) (TSRMG_FAST_BULK_STATIC(offset, type)->element)
179179#define TSRMG_FAST_BULK_STATIC (offset , type ) ((type) (((char*) TSRMLS_CACHE)+(offset)))
180180struct _zend_tsrm_ls_cache ;
181+ #if defined(ZEND_WIN32 ) && !defined(LIBZEND_EXPORTS )
182+ /* Windows can't dllexport the TLS struct, so outside Zend each module
183+ * keeps a per-module `void *` pointer and reaches EG/CG via the resource-id indirection. */
184+ # define ZEND_TSRMLS_CACHE_T void *
185+ # define TSRMLS_MAIN_CACHE_DEFINE () TSRM_TLS void *_tsrm_ls_cache TSRM_TLS_MODEL_ATTR = NULL;
186+ # define TSRMLS_CACHE_DEFINE () TSRM_TLS void *_tsrm_ls_cache = NULL;
187+ #else
188+ # define ZEND_TSRMLS_CACHE_T struct _zend_tsrm_ls_cache
189+ # define TSRMLS_MAIN_CACHE_DEFINE ()
190+ # define TSRMLS_CACHE_DEFINE ()
191+ #endif
181192#ifdef __cplusplus
182- #define TSRMLS_MAIN_CACHE_EXTERN () extern "C" { extern TSRM_TLS struct _zend_tsrm_ls_cache _tsrm_ls_cache TSRM_TLS_MODEL_ATTR; }
183- #define TSRMLS_CACHE_EXTERN () extern "C" { extern TSRM_TLS struct _zend_tsrm_ls_cache _tsrm_ls_cache; }
193+ #define TSRMLS_MAIN_CACHE_EXTERN () extern "C" { extern TSRM_TLS ZEND_TSRMLS_CACHE_T _tsrm_ls_cache TSRM_TLS_MODEL_ATTR; }
194+ #define TSRMLS_CACHE_EXTERN () extern "C" { extern TSRM_TLS ZEND_TSRMLS_CACHE_T _tsrm_ls_cache; }
184195#else
185- #define TSRMLS_MAIN_CACHE_EXTERN () extern TSRM_TLS struct _zend_tsrm_ls_cache _tsrm_ls_cache TSRM_TLS_MODEL_ATTR;
186- #define TSRMLS_CACHE_EXTERN () extern TSRM_TLS struct _zend_tsrm_ls_cache _tsrm_ls_cache;
196+ #define TSRMLS_MAIN_CACHE_EXTERN () extern TSRM_TLS ZEND_TSRMLS_CACHE_T _tsrm_ls_cache TSRM_TLS_MODEL_ATTR;
197+ #define TSRMLS_CACHE_EXTERN () extern TSRM_TLS ZEND_TSRMLS_CACHE_T _tsrm_ls_cache;
187198#endif
188- #define TSRMLS_MAIN_CACHE_DEFINE ()
189- #define TSRMLS_CACHE_DEFINE ()
190199#define TSRMLS_CACHE_UPDATE () TSRMLS_CACHE = tsrm_get_ls_cache()
191200#define TSRMLS_CACHE (*(void **) &_tsrm_ls_cache)
192201
0 commit comments