blob: e668285ba29ba61d3a7275990dea890f76d0e27f [file] [log] [blame]
Steve Antonf2737d22017-10-31 16:27:34 -07001/*
2 * Copyright 2017 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 "api/proxy.h"
12
13namespace webrtc {
14namespace internal {
15
16SynchronousMethodCall::SynchronousMethodCall(rtc::MessageHandler* proxy)
Niels Möller58376f32018-11-15 09:31:38 +010017 : proxy_(proxy) {}
Steve Antonf2737d22017-10-31 16:27:34 -070018
19SynchronousMethodCall::~SynchronousMethodCall() = default;
20
21void SynchronousMethodCall::Invoke(const rtc::Location& posted_from,
22 rtc::Thread* t) {
23 if (t->IsCurrent()) {
24 proxy_->OnMessage(nullptr);
25 } else {
Steve Antonf2737d22017-10-31 16:27:34 -070026 t->Post(posted_from, this, 0);
Niels Möller58376f32018-11-15 09:31:38 +010027 e_.Wait(rtc::Event::kForever);
Steve Antonf2737d22017-10-31 16:27:34 -070028 }
29}
30
31void SynchronousMethodCall::OnMessage(rtc::Message*) {
32 proxy_->OnMessage(nullptr);
Niels Möller58376f32018-11-15 09:31:38 +010033 e_.Set();
Steve Antonf2737d22017-10-31 16:27:34 -070034}
35
36} // namespace internal
37} // namespace webrtc