Commit 1b81a4ec authored by Qingsi Wang's avatar Qingsi Wang Committed by Commit Bot

Use thread-safe interface pointer in MdnsResponderAdapter.

The Mojo InterfacePtr is not thread-safe. The MdnsResponderAdapter,
which is the client of the mDNS responder service via a Mojo binding, is
created on the main thread to access the connector to the service
manager, while being used exclusively on a WebRTC work thread. As a
result, it should own a thread-safe InterfacePtr to the mDNS service.

Bug: 905566
Change-Id: I8395f4163d0d9f17b954d082a580af673bb107f3
Reviewed-on: https://chromium-review.googlesource.com/c/1351596Reviewed-by: default avatarSergey Ulanov <sergeyu@chromium.org>
Commit-Queue: Qingsi Wang <qingsi@google.com>
Cr-Commit-Position: refs/heads/master@{#611300}
parent 839355ac
......@@ -39,22 +39,26 @@ void OnNameRemovedForAddress(
} // namespace
MdnsResponderAdapter::MdnsResponderAdapter() {
network::mojom::MdnsResponderPtr client;
auto request = mojo::MakeRequest(&client);
thread_safe_client_ =
network::mojom::ThreadSafeMdnsResponderPtr::Create(std::move(client));
ChildThreadImpl::current()->GetConnector()->BindInterface(
mojom::kBrowserServiceName, mojo::MakeRequest(&client_));
mojom::kBrowserServiceName, std::move(request));
}
MdnsResponderAdapter::~MdnsResponderAdapter() = default;
void MdnsResponderAdapter::CreateNameForAddress(const rtc::IPAddress& addr,
NameCreatedCallback callback) {
client_->CreateNameForAddress(
thread_safe_client_->get()->CreateNameForAddress(
jingle_glue::RtcIPAddressToNetIPAddress(addr),
base::BindOnce(&OnNameCreatedForAddress, callback, addr));
}
void MdnsResponderAdapter::RemoveNameForAddress(const rtc::IPAddress& addr,
NameRemovedCallback callback) {
client_->RemoveNameForAddress(
thread_safe_client_->get()->RemoveNameForAddress(
jingle_glue::RtcIPAddressToNetIPAddress(addr),
base::BindOnce(&OnNameRemovedForAddress, callback));
}
......
......@@ -32,7 +32,7 @@ class MdnsResponderAdapter : public webrtc::MdnsResponderInterface {
NameRemovedCallback callback) override;
private:
network::mojom::MdnsResponderPtr client_;
scoped_refptr<network::mojom::ThreadSafeMdnsResponderPtr> thread_safe_client_;
DISALLOW_COPY_AND_ASSIGN(MdnsResponderAdapter);
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment