OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2008 Apple Inc. All rights reserved. |
3 * Copyright (C) 2009 Jian Li <jianli@chromium.org> | 3 * Copyright (C) 2009 Jian Li <jianli@chromium.org> |
4 * Copyright (C) 2012 Patrick Gansterer <paroga@paroga.com> | 4 * Copyright (C) 2012 Patrick Gansterer <paroga@paroga.com> |
5 * | 5 * |
6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
8 * are met: | 8 * are met: |
9 * | 9 * |
10 * 1. Redistributions of source code must retain the above copyright | 10 * 1. Redistributions of source code must retain the above copyright |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 } | 148 } |
149 | 149 |
150 template <typename T> | 150 template <typename T> |
151 inline T* ThreadSpecific<T>::get() { | 151 inline T* ThreadSpecific<T>::get() { |
152 Data* data = static_cast<Data*>(pthread_getspecific(m_key)); | 152 Data* data = static_cast<Data*>(pthread_getspecific(m_key)); |
153 return data ? data->value : 0; | 153 return data ? data->value : 0; |
154 } | 154 } |
155 | 155 |
156 template <typename T> | 156 template <typename T> |
157 inline void ThreadSpecific<T>::set(T* ptr) { | 157 inline void ThreadSpecific<T>::set(T* ptr) { |
158 ASSERT(!get()); | 158 DCHECK(!get()); |
159 pthread_setspecific(m_key, new Data(ptr, this)); | 159 pthread_setspecific(m_key, new Data(ptr, this)); |
160 } | 160 } |
161 | 161 |
162 #elif OS(WIN) | 162 #elif OS(WIN) |
163 | 163 |
164 // TLS_OUT_OF_INDEXES is not defined on WinCE. | 164 // TLS_OUT_OF_INDEXES is not defined on WinCE. |
165 #ifndef TLS_OUT_OF_INDEXES | 165 #ifndef TLS_OUT_OF_INDEXES |
166 #define TLS_OUT_OF_INDEXES 0xffffffff | 166 #define TLS_OUT_OF_INDEXES 0xffffffff |
167 #endif | 167 #endif |
168 | 168 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 } | 205 } |
206 | 206 |
207 template <typename T> | 207 template <typename T> |
208 inline T* ThreadSpecific<T>::get() { | 208 inline T* ThreadSpecific<T>::get() { |
209 Data* data = static_cast<Data*>(TlsGetValue(tlsKeys()[m_index])); | 209 Data* data = static_cast<Data*>(TlsGetValue(tlsKeys()[m_index])); |
210 return data ? data->value : 0; | 210 return data ? data->value : 0; |
211 } | 211 } |
212 | 212 |
213 template <typename T> | 213 template <typename T> |
214 inline void ThreadSpecific<T>::set(T* ptr) { | 214 inline void ThreadSpecific<T>::set(T* ptr) { |
215 ASSERT(!get()); | 215 DCHECK(!get()); |
216 Data* data = new Data(ptr, this); | 216 Data* data = new Data(ptr, this); |
217 data->destructor = &ThreadSpecific<T>::destroy; | 217 data->destructor = &ThreadSpecific<T>::destroy; |
218 TlsSetValue(tlsKeys()[m_index], data); | 218 TlsSetValue(tlsKeys()[m_index], data); |
219 } | 219 } |
220 | 220 |
221 #else | 221 #else |
222 #error ThreadSpecific is not implemented for this platform. | 222 #error ThreadSpecific is not implemented for this platform. |
223 #endif | 223 #endif |
224 | 224 |
225 template <typename T> | 225 template <typename T> |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 template <typename T> | 278 template <typename T> |
279 inline T& ThreadSpecific<T>::operator*() { | 279 inline T& ThreadSpecific<T>::operator*() { |
280 return *operator T*(); | 280 return *operator T*(); |
281 } | 281 } |
282 | 282 |
283 } // namespace WTF | 283 } // namespace WTF |
284 | 284 |
285 using WTF::ThreadSpecific; | 285 using WTF::ThreadSpecific; |
286 | 286 |
287 #endif // WTF_ThreadSpecific_h | 287 #endif // WTF_ThreadSpecific_h |
OLD | NEW |