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