Jacek Caban : mshtml: Use TLS_OUT_OF_INDEXES as invalid TLS value.
Module: wine Branch: master Commit: 88f7fd5deacf3c36890aa96e3515fda3c531be03 URL: http://source.winehq.org/git/wine.git/?a=commit;h=88f7fd5deacf3c36890aa96e35... Author: Jacek Caban <jacek(a)codeweavers.com> Date: Sun May 24 23:17:03 2009 +0200 mshtml: Use TLS_OUT_OF_INDEXES as invalid TLS value. Spotted by Vitaliy Margolen. --- dlls/mshtml/main.c | 4 ++-- dlls/mshtml/task.c | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/dlls/mshtml/main.c b/dlls/mshtml/main.c index aed4d76..3057276 100644 --- a/dlls/mshtml/main.c +++ b/dlls/mshtml/main.c @@ -44,7 +44,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml); HINSTANCE hInst; -DWORD mshtml_tls = 0; +DWORD mshtml_tls = TLS_OUT_OF_INDEXES; static HINSTANCE shdoclc = NULL; @@ -69,7 +69,7 @@ static void process_detach(void) if(shdoclc) FreeLibrary(shdoclc); - if(mshtml_tls) + if(mshtml_tls != TLS_OUT_OF_INDEXES) TlsFree(mshtml_tls); } diff --git a/dlls/mshtml/task.c b/dlls/mshtml/task.c index ffef543..496b96f 100644 --- a/dlls/mshtml/task.c +++ b/dlls/mshtml/task.c @@ -478,11 +478,19 @@ thread_data_t *get_thread_data(BOOL create) { thread_data_t *thread_data; - if(!mshtml_tls) { - if(create) - mshtml_tls = TlsAlloc(); - else + if(mshtml_tls == TLS_OUT_OF_INDEXES) { + DWORD tls; + + if(!create) + return NULL; + + tls = TlsAlloc(); + if(tls == TLS_OUT_OF_INDEXES) return NULL; + + tls = InterlockedCompareExchange((LONG*)&mshtml_tls, tls, TLS_OUT_OF_INDEXES); + if(tls != mshtml_tls) + TlsFree(tls); } thread_data = TlsGetValue(mshtml_tls);
participants (1)
-
Alexandre Julliard