Author: jsdelfino
Date: Tue Jan  2 18:52:56 2007
New Revision: 492028

URL: http://svn.apache.org/viewvc?view=rev&rev=492028
Log:
Ported the ThreadLocal implementation to Windows.

Modified:
    
incubator/tuscany/cpp/sca/VSExpress/tuscany_sca/tuscany_sca/tuscany_sca.vcproj
    incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/util/ThreadLocal.cpp
    incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/util/ThreadLocal.h

Modified: 
incubator/tuscany/cpp/sca/VSExpress/tuscany_sca/tuscany_sca/tuscany_sca.vcproj
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/VSExpress/tuscany_sca/tuscany_sca/tuscany_sca.vcproj?view=diff&rev=492028&r1=492027&r2=492028
==============================================================================
--- 
incubator/tuscany/cpp/sca/VSExpress/tuscany_sca/tuscany_sca/tuscany_sca.vcproj 
(original)
+++ 
incubator/tuscany/cpp/sca/VSExpress/tuscany_sca/tuscany_sca/tuscany_sca.vcproj 
Tue Jan  2 18:52:56 2007
@@ -1014,6 +1014,14 @@
                                        >
                                </File>
                                <File
+                                       
RelativePath="..\..\..\runtime\core\src\tuscany\sca\util\ThreadLocal.cpp"
+                                       >
+                               </File>
+                               <File
+                                       
RelativePath="..\..\..\runtime\core\src\tuscany\sca\util\ThreadLocal.h"
+                                       >
+                               </File>
+                               <File
                                        
RelativePath="..\..\..\runtime\core\src\tuscany\sca\util\Utils.cpp"
                                        >
                                        <FileConfiguration

Modified: 
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/util/ThreadLocal.cpp
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/util/ThreadLocal.cpp?view=diff&rev=492028&r1=492027&r2=492028
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/util/ThreadLocal.cpp 
(original)
+++ incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/util/ThreadLocal.cpp 
Tue Jan  2 18:52:56 2007
@@ -47,6 +47,13 @@
             {
                 logentry();
 #if defined(WIN32)  || defined (_WINDOWS)
+                index = TlsAlloc();
+                if (index == TLS_OUT_OF_INDEXES)
+                {
+                    ostringstream msg;
+                    msg << "Failed to create thread local index, error: " << 
GetLastError();
+                    throwException(TuscanyRuntimeException, msg.str().c_str());
+                }
 #else
                 int rc = pthread_key_create(&key, NULL);
                 if (rc)
@@ -62,6 +69,12 @@
             {
                 logentry();
 #if defined(WIN32)  || defined (_WINDOWS)
+                if (!TlsFree(index))
+                {
+                    ostringstream msg;
+                    msg << "Failed to destroy thread local index, error: " << 
GetLastError();
+                    throwException(TuscanyRuntimeException, msg.str().c_str());
+                }
 #else
                 int rc = pthread_key_delete(key);
                 if (rc) {
@@ -72,10 +85,16 @@
 #endif             
             }
             
-            void ThreadLocal::setValue(const void* value)
+            void ThreadLocal::setValue(void* value)
             {
                 logentry();
 #if defined(WIN32)  || defined (_WINDOWS)
+                if (!TlsSetValue(index, value))
+                {
+                    ostringstream msg;
+                    msg << "Failed to set thread local value, error: " << 
GetLastError();
+                    throwException(TuscanyRuntimeException, msg.str().c_str());
+                }
 #else
                 int rc = pthread_setspecific(key, value);
                 if (rc) {
@@ -90,6 +109,7 @@
             {
                 logentry();
 #if defined(WIN32)  || defined (_WINDOWS)
+                return TlsGetValue(index);
 #else
                 return pthread_getspecific(key);
 #endif             

Modified: 
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/util/ThreadLocal.h
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/util/ThreadLocal.h?view=diff&rev=492028&r1=492027&r2=492028
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/util/ThreadLocal.h 
(original)
+++ incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/util/ThreadLocal.h 
Tue Jan  2 18:52:56 2007
@@ -57,7 +57,7 @@
                 /**
                  * Set the ThreadLocal value.
                  */ 
-                void setValue(const void *value);
+                void setValue(void *value);
 
                 /**
                  * Get the ThreadLocal value.
@@ -70,6 +70,7 @@
                  * Handle to the thread local key.
                  */ 
 #if defined(WIN32)  || defined (_WINDOWS)
+                DWORD index;
 #else
                 pthread_key_t key;
 #endif



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to