Index: webrtc/rtc_base/task_queue_impl_factory.cc |
diff --git a/webrtc/rtc_base/task_queue_impl_factory.cc b/webrtc/rtc_base/task_queue_impl_factory.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..433da0cb6d3603e787879bc7aeb074babe6a167a |
--- /dev/null |
+++ b/webrtc/rtc_base/task_queue_impl_factory.cc |
@@ -0,0 +1,39 @@ |
+/* |
+ * Copyright 2017 The WebRTC Project Authors. All rights reserved. |
+ * |
+ * Use of this source code is governed by a BSD-style license |
+ * that can be found in the LICENSE file in the root of the source |
+ * tree. An additional intellectual property rights grant can be found |
+ * in the file PATENTS. All contributing project authors may |
+ * be found in the AUTHORS file in the root of the source tree. |
+ */ |
+ |
+#include <webrtc/rtc_base/task_queue_impl_factory.h> |
+ |
+namespace rtc { |
+ |
+// TODO(perkj): now!! Do we have a way to lazy instantiate ? OnceInit... |
+static TaskQueueImplFactory* taskqueue_factory = nullptr; |
+static rtc::CriticalSection set_lock; |
+ |
+// Sets the factory to be used by this process. May only be called once |
+// before any TaskQueues are created. |
+// static |
+void TaskQueueImplFactory::Set(TaskQueueImplFactory* factory) { |
kwiberg-webrtc
2017/08/21 09:21:55
Is it really a good idea for Set() to not take own
|
+ rtc::CritScope lock(&set_lock); |
+ // TODO(perkj): if OnceInit exist... DOn't allow someone to call Set again. |
nisse-webrtc
2017/08/18 11:45:45
If you can put a static variable in a single metho
|
+ if (taskqueue_factory) |
+ return; |
kwiberg-webrtc
2017/08/21 09:21:55
If the contract is that you're only allowed to cal
|
+ taskqueue_factory = factory; |
+} |
+ |
+TaskQueueImplFactory* TaskQueueImplFactory::Get() { |
+ if (taskqueue_factory) |
kwiberg-webrtc
2017/08/21 09:21:55
Don't read this variable without taking the lock.
|
+ return taskqueue_factory; |
+#if defined(WEBRTC_LINUX) |
+ Set(new TaskQueueLibEventFactory()); |
+#endif |
+ return taskqueue_factory; |
+} |
+ |
+} // namespace rtc |