From 569b8895850cd69a4a6449bc0c37da736dde833f Mon Sep 17 00:00:00 2001 From: Chris Manton Date: Mon, 11 Nov 2019 11:42:17 -0800 Subject: [PATCH] Save callbacks in thread protected space Also include transition to posting using module semantics Bug: 144171652 Test: Run CtsVerifier in Gd mode Change-Id: Ia2a879b6f685a1d31fa6ed9c4bf29f4cc3d358bf --- gd/shim/l2cap.cc | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/gd/shim/l2cap.cc b/gd/shim/l2cap.cc index 58b10b562..118b1cf22 100644 --- a/gd/shim/l2cap.cc +++ b/gd/shim/l2cap.cc @@ -358,7 +358,11 @@ void L2cap::impl::RegisterService(l2cap::Psm psm, ConnectionOpenCallback on_open ASSERT(psm_to_register_complete_map_.find(psm) == psm_to_register_complete_map_.end()); ASSERT(psm_to_on_open_map_.find(psm) == psm_to_on_open_map_.end()); - psm_to_on_open_map_[psm] = on_open; + { + std::unique_lock lock(mutex_); + psm_to_on_open_map_[psm] = on_open; + psm_to_register_complete_map_[psm] = std::move(completed); + } psm_to_service_interface_map_.emplace( psm, std::make_shared( @@ -434,7 +438,8 @@ bool L2cap::impl::Write(ConnectionInterfaceDescriptor cid, std::unique_ptr completed) { l2cap::Psm psm{raw_psm}; - pimpl_->RegisterService(psm, on_open, std::move(completed)); + GetHandler()->Post(common::BindOnce(&L2cap::impl::RegisterService, common::Unretained(pimpl_.get()), psm, on_open, + std::move(completed))); } void L2cap::UnregisterService(uint16_t raw_psm) { @@ -447,7 +452,8 @@ void L2cap::CreateConnection(uint16_t raw_psm, const std::string address_string, hci::Address address; hci::Address::FromString(address_string, address); - return pimpl_->CreateConnection(psm, address, std::move(completed)); + GetHandler()->Post(common::BindOnce(&L2cap::impl::CreateConnection, common::Unretained(pimpl_.get()), psm, address, + std::move(completed))); } void L2cap::CloseConnection(uint16_t raw_cid) { -- 2.11.0