Ignore:
Timestamp:
Mar 11, 2009, 1:39:21 PM (16 years ago)
Author:
Adam Roben
Message:

Change the Windows implementation of ThreadSpecific to use functions instead of extern globals

This will make it easier to export ThreadSpecific from WebKit.

Reviewed by John Sullivan.

  • API/JSBase.cpp: (JSEvaluateScript): Touched this file to force ThreadSpecific.h to be copied into $WebKitOutputDir.
  • wtf/ThreadSpecific.h: Replaced g_tls_key_count with tlsKeyCount() and g_tls_keys with tlsKeys().

(WTF::::ThreadSpecific):
(WTF::::~ThreadSpecific):
(WTF::::get):
(WTF::::set):
(WTF::::destroy):
Updated to use the new functions.

  • wtf/ThreadSpecificWin.cpp: (WTF::tlsKeyCount): (WTF::tlsKeys): Added.

(WTF::ThreadSpecificThreadExit): Changed to use the new functions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/wtf/ThreadSpecific.h

    r39708 r41594  
    130130const int kMaxTlsKeySize = 256;
    131131
    132 extern long g_tls_key_count;
    133 extern DWORD g_tls_keys[kMaxTlsKeySize];
     132long& tlsKeyCount();
     133DWORD* tlsKeys();
    134134
    135135template<typename T>
     
    141141        CRASH();
    142142
    143     m_index = InterlockedIncrement(&g_tls_key_count) - 1;
     143    m_index = InterlockedIncrement(&tlsKeyCount()) - 1;
    144144    if (m_index >= kMaxTlsKeySize)
    145145        CRASH();
    146     g_tls_keys[m_index] = tls_key;
     146    tlsKeys()[m_index] = tls_key;
    147147}
    148148
     
    151151{
    152152    // Does not invoke destructor functions. They will be called from ThreadSpecificThreadExit when the thread is detached.
    153     TlsFree(g_tls_keys[m_index]);
     153    TlsFree(tlsKeys()[m_index]);
    154154}
    155155
     
    157157inline T* ThreadSpecific<T>::get()
    158158{
    159     Data* data = static_cast<Data*>(TlsGetValue(g_tls_keys[m_index]));
     159    Data* data = static_cast<Data*>(TlsGetValue(tlsKeys()[m_index]));
    160160    return data ? data->value : 0;
    161161}
     
    167167    Data* data = new Data(ptr, this);
    168168    data->destructor = &ThreadSpecific<T>::destroy;
    169     TlsSetValue(g_tls_keys[m_index], data);
     169    TlsSetValue(tlsKeys()[m_index], data);
    170170}
    171171
     
    191191    pthread_setspecific(data->owner->m_key, 0);
    192192#elif PLATFORM(WIN_OS)
    193     TlsSetValue(g_tls_keys[data->owner->m_index], 0);
     193    TlsSetValue(tlsKeys()[data->owner->m_index], 0);
    194194#else
    195195#error ThreadSpecific is not implemented for this platform.
Note: See TracChangeset for help on using the changeset viewer.