Line data Source code
1 : /*
2 : * Copyright 2016 The WebRTC Project Authors. All rights reserved.
3 : *
4 : * Use of this source code is governed by a BSD-style license
5 : * that can be found in the LICENSE file in the root of the source
6 : * tree. An additional intellectual property rights grant can be found
7 : * in the file PATENTS. All contributing project authors may
8 : * be found in the AUTHORS file in the root of the source tree.
9 : */
10 :
11 : #include "webrtc/base/task_queue_posix.h"
12 :
13 : #include "webrtc/base/checks.h"
14 : #include "webrtc/base/task_queue.h"
15 :
16 : namespace rtc {
17 : namespace internal {
18 : pthread_key_t g_queue_ptr_tls = 0;
19 :
20 0 : void InitializeTls() {
21 0 : RTC_CHECK(pthread_key_create(&g_queue_ptr_tls, nullptr) == 0);
22 0 : }
23 :
24 0 : pthread_key_t GetQueuePtrTls() {
25 : static pthread_once_t init_once = PTHREAD_ONCE_INIT;
26 0 : RTC_CHECK(pthread_once(&init_once, &InitializeTls) == 0);
27 0 : return g_queue_ptr_tls;
28 : }
29 :
30 0 : AutoSetCurrentQueuePtr::AutoSetCurrentQueuePtr(TaskQueue* q)
31 0 : : prev_(TaskQueue::Current()) {
32 0 : pthread_setspecific(GetQueuePtrTls(), q);
33 0 : }
34 :
35 0 : AutoSetCurrentQueuePtr::~AutoSetCurrentQueuePtr() {
36 0 : pthread_setspecific(GetQueuePtrTls(), prev_);
37 0 : }
38 :
39 : } // namespace internal
40 : } // namespace rtc
|