Jacek Caban : mshtml: Use TLS_OUT_OF_INDEXES as invalid TLS value.
Alexandre Julliard
julliard at winehq.org
Mon May 25 10:06:32 CDT 2009
Module: wine
Branch: master
Commit: 88f7fd5deacf3c36890aa96e3515fda3c531be03
URL: http://source.winehq.org/git/wine.git/?a=commit;h=88f7fd5deacf3c36890aa96e3515fda3c531be03
Author: Jacek Caban <jacek at 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);
More information about the wine-cvs
mailing list