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( ...@@ -39,22 +39,26 @@ void OnNameRemovedForAddress(
} // namespace } // namespace
MdnsResponderAdapter::MdnsResponderAdapter() { 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( ChildThreadImpl::current()->GetConnector()->BindInterface(
mojom::kBrowserServiceName, mojo::MakeRequest(&client_)); mojom::kBrowserServiceName, std::move(request));
} }
MdnsResponderAdapter::~MdnsResponderAdapter() = default; MdnsResponderAdapter::~MdnsResponderAdapter() = default;
void MdnsResponderAdapter::CreateNameForAddress(const rtc::IPAddress& addr, void MdnsResponderAdapter::CreateNameForAddress(const rtc::IPAddress& addr,
NameCreatedCallback callback) { NameCreatedCallback callback) {
client_->CreateNameForAddress( thread_safe_client_->get()->CreateNameForAddress(
jingle_glue::RtcIPAddressToNetIPAddress(addr), jingle_glue::RtcIPAddressToNetIPAddress(addr),
base::BindOnce(&OnNameCreatedForAddress, callback, addr)); base::BindOnce(&OnNameCreatedForAddress, callback, addr));
} }
void MdnsResponderAdapter::RemoveNameForAddress(const rtc::IPAddress& addr, void MdnsResponderAdapter::RemoveNameForAddress(const rtc::IPAddress& addr,
NameRemovedCallback callback) { NameRemovedCallback callback) {
client_->RemoveNameForAddress( thread_safe_client_->get()->RemoveNameForAddress(
jingle_glue::RtcIPAddressToNetIPAddress(addr), jingle_glue::RtcIPAddressToNetIPAddress(addr),
base::BindOnce(&OnNameRemovedForAddress, callback)); base::BindOnce(&OnNameRemovedForAddress, callback));
} }
......
...@@ -32,7 +32,7 @@ class MdnsResponderAdapter : public webrtc::MdnsResponderInterface { ...@@ -32,7 +32,7 @@ class MdnsResponderAdapter : public webrtc::MdnsResponderInterface {
NameRemovedCallback callback) override; NameRemovedCallback callback) override;
private: private:
network::mojom::MdnsResponderPtr client_; scoped_refptr<network::mojom::ThreadSafeMdnsResponderPtr> thread_safe_client_;
DISALLOW_COPY_AND_ASSIGN(MdnsResponderAdapter); 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