Changeset 61712 in webkit for trunk/JavaScriptCore/wtf/ThreadSpecific.h
- Timestamp:
- Jun 23, 2010, 3:27:59 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/wtf/ThreadSpecific.h
r54123 r61712 48 48 #elif PLATFORM(QT) 49 49 #include <QThreadStorage> 50 #elif PLATFORM(GTK) 51 #include <glib.h> 50 52 #elif OS(WINDOWS) 51 53 #include <windows.h> … … 54 56 namespace WTF { 55 57 56 #if !USE(PTHREADS) && !PLATFORM(QT) && OS(WINDOWS)58 #if !USE(PTHREADS) && !PLATFORM(QT) && !PLATFORM(GTK) && OS(WINDOWS) 57 59 // ThreadSpecificThreadExit should be called each time when a thread is detached. 58 60 // This is done automatically for threads created with WTF::createThread. … … 69 71 70 72 private: 71 #if !USE(PTHREADS) && !PLATFORM(QT) && OS(WINDOWS)73 #if !USE(PTHREADS) && !PLATFORM(QT) && !PLATFORM(GTK) && OS(WINDOWS) 72 74 friend void ThreadSpecificThreadExit(); 73 75 #endif … … 77 79 void static destroy(void* ptr); 78 80 79 #if USE(PTHREADS) || PLATFORM(QT) || OS(WINDOWS)81 #if USE(PTHREADS) || PLATFORM(QT) || PLATFORM(GTK) || OS(WINDOWS) 80 82 struct Data : Noncopyable { 81 83 Data(T* value, ThreadSpecific<T>* owner) : value(value), owner(owner) {} … … 86 88 T* value; 87 89 ThreadSpecific<T>* owner; 88 #if !USE(PTHREADS) && !PLATFORM(QT) 90 #if !USE(PTHREADS) && !PLATFORM(QT) && !PLATFORM(GTK) 89 91 void (*destructor)(void*); 90 92 #endif … … 99 101 #elif PLATFORM(QT) 100 102 QThreadStorage<Data*> m_key; 103 #elif PLATFORM(GTK) 104 GStaticPrivate m_key; 101 105 #elif OS(WINDOWS) 102 106 int m_index; … … 185 189 Data* data = new Data(ptr, this); 186 190 m_key.setLocalData(data); 191 } 192 193 #elif PLATFORM(GTK) 194 195 template<typename T> 196 inline ThreadSpecific<T>::ThreadSpecific() 197 { 198 g_static_private_init(&m_key); 199 } 200 201 template<typename T> 202 inline ThreadSpecific<T>::~ThreadSpecific() 203 { 204 g_static_private_free(&m_key); 205 } 206 207 template<typename T> 208 inline T* ThreadSpecific<T>::get() 209 { 210 Data* data = static_cast<Data*>(g_static_private_get(&m_key)); 211 return data ? data->value : 0; 212 } 213 214 template<typename T> 215 inline void ThreadSpecific<T>::set(T* ptr) 216 { 217 ASSERT(!get()); 218 Data* data = new Data(ptr, this); 219 g_static_private_set(&m_key, data, destroy); 187 220 } 188 221 … … 254 287 // Some pthreads implementations zero out the pointer before calling destroy(), so we temporarily reset it. 255 288 pthread_setspecific(data->owner->m_key, ptr); 289 #elif PLATFORM(GTK) 290 // See comment as above 291 g_static_private_set(&data->owner->m_key, data, 0); 256 292 #endif 257 293 #if PLATFORM(QT) … … 267 303 #elif PLATFORM(QT) 268 304 // Do nothing here 305 #elif PLATFORM(GTK) 306 g_static_private_set(&data->owner->m_key, 0, 0); 269 307 #elif OS(WINDOWS) 270 308 TlsSetValue(tlsKeys()[data->owner->m_index], 0);
Note:
See TracChangeset
for help on using the changeset viewer.