|
14 | 14 |
|
15 | 15 | namespace rocksdb {
|
16 | 16 |
|
17 |
| -std::unique_ptr<ThreadLocalPtr::StaticMeta> ThreadLocalPtr::StaticMeta::inst_; |
18 | 17 | port::Mutex ThreadLocalPtr::StaticMeta::mutex_;
|
19 | 18 | #if !defined(OS_MACOSX)
|
20 | 19 | __thread ThreadLocalPtr::ThreadData* ThreadLocalPtr::StaticMeta::tls_ = nullptr;
|
21 | 20 | #endif
|
22 | 21 |
|
23 |
| -ThreadLocalPtr::StaticMeta* ThreadLocalPtr::StaticMeta::Instance() { |
24 |
| - if (UNLIKELY(inst_ == nullptr)) { |
25 |
| - MutexLock l(&mutex_); |
26 |
| - if (inst_ == nullptr) { |
27 |
| - inst_.reset(new StaticMeta()); |
28 |
| - } |
29 |
| - } |
30 |
| - return inst_.get(); |
| 22 | +ThreadLocalPtr::StaticMeta* ThreadLocalPtr::Instance() { |
| 23 | + static ThreadLocalPtr::StaticMeta inst; |
| 24 | + return &inst; |
31 | 25 | }
|
32 | 26 |
|
33 | 27 | void ThreadLocalPtr::StaticMeta::OnThreadExit(void* ptr) {
|
@@ -216,34 +210,34 @@ void ThreadLocalPtr::StaticMeta::ReclaimId(uint32_t id) {
|
216 | 210 | }
|
217 | 211 |
|
218 | 212 | ThreadLocalPtr::ThreadLocalPtr(UnrefHandler handler)
|
219 |
| - : id_(StaticMeta::Instance()->GetId()) { |
| 213 | + : id_(Instance()->GetId()) { |
220 | 214 | if (handler != nullptr) {
|
221 |
| - StaticMeta::Instance()->SetHandler(id_, handler); |
| 215 | + Instance()->SetHandler(id_, handler); |
222 | 216 | }
|
223 | 217 | }
|
224 | 218 |
|
225 | 219 | ThreadLocalPtr::~ThreadLocalPtr() {
|
226 |
| - StaticMeta::Instance()->ReclaimId(id_); |
| 220 | + Instance()->ReclaimId(id_); |
227 | 221 | }
|
228 | 222 |
|
229 | 223 | void* ThreadLocalPtr::Get() const {
|
230 |
| - return StaticMeta::Instance()->Get(id_); |
| 224 | + return Instance()->Get(id_); |
231 | 225 | }
|
232 | 226 |
|
233 | 227 | void ThreadLocalPtr::Reset(void* ptr) {
|
234 |
| - StaticMeta::Instance()->Reset(id_, ptr); |
| 228 | + Instance()->Reset(id_, ptr); |
235 | 229 | }
|
236 | 230 |
|
237 | 231 | void* ThreadLocalPtr::Swap(void* ptr) {
|
238 |
| - return StaticMeta::Instance()->Swap(id_, ptr); |
| 232 | + return Instance()->Swap(id_, ptr); |
239 | 233 | }
|
240 | 234 |
|
241 | 235 | bool ThreadLocalPtr::CompareAndSwap(void* ptr, void*& expected) {
|
242 |
| - return StaticMeta::Instance()->CompareAndSwap(id_, ptr, expected); |
| 236 | + return Instance()->CompareAndSwap(id_, ptr, expected); |
243 | 237 | }
|
244 | 238 |
|
245 | 239 | void ThreadLocalPtr::Scrape(autovector<void*>* ptrs, void* const replacement) {
|
246 |
| - StaticMeta::Instance()->Scrape(id_, ptrs, replacement); |
| 240 | + Instance()->Scrape(id_, ptrs, replacement); |
247 | 241 | }
|
248 | 242 |
|
249 | 243 | } // namespace rocksdb
|
0 commit comments