improve concurrency handling.

PiperOrigin-RevId: 626916898
This commit is contained in:
Francis Tsui
2024-04-21 22:24:34 -07:00
committed by Copybara-Service
parent 1b4db47fb6
commit ef924e5003
2 changed files with 32 additions and 10 deletions
+27 -8
View File
@@ -57,7 +57,10 @@ void FakeNearbyConnectionsManager::StartAdvertising(
ConnectionsCallback callback) {
NL_DCHECK(!IsAdvertising());
is_shutdown_ = false;
advertising_listener_ = listener;
{
absl::MutexLock lock(&listener_mutex_);
advertising_listener_ = listener;
}
advertising_data_usage_ = data_usage;
advertising_power_level_ = power_level;
advertising_endpoint_info_ = std::move(endpoint_info);
@@ -73,7 +76,10 @@ void FakeNearbyConnectionsManager::StopAdvertising(
ConnectionsCallback callback) {
NL_DCHECK(IsAdvertising());
NL_DCHECK(!is_shutdown());
advertising_listener_ = nullptr;
{
absl::MutexLock lock(&listener_mutex_);
advertising_listener_ = nullptr;
}
advertising_data_usage_ = DataUsage::UNKNOWN_DATA_USAGE;
advertising_power_level_ = PowerLevel::kUnknown;
advertising_endpoint_info_.reset();
@@ -89,6 +95,7 @@ void FakeNearbyConnectionsManager::StartDiscovery(
DiscoveryListener* listener, DataUsage data_usage,
ConnectionsCallback callback) {
is_shutdown_ = false;
absl::MutexLock lock(&listener_mutex_);
discovery_listener_ = listener;
std::move(callback)(Status::kSuccess);
}
@@ -96,6 +103,7 @@ void FakeNearbyConnectionsManager::StartDiscovery(
void FakeNearbyConnectionsManager::StopDiscovery() {
NL_DCHECK(IsDiscovering());
NL_DCHECK(!is_shutdown());
absl::MutexLock lock(&listener_mutex_);
discovery_listener_ = nullptr;
}
@@ -204,23 +212,33 @@ void FakeNearbyConnectionsManager::UpgradeBandwidth(
void FakeNearbyConnectionsManager::OnEndpointFound(
absl::string_view endpoint_id,
std::unique_ptr<DiscoveredEndpointInfo> info) {
if (discovery_listener_ == nullptr) return;
discovery_listener_->OnEndpointDiscovered(endpoint_id, info->endpoint_info);
DiscoveryListener* listener = nullptr;
{
absl::MutexLock lock(&listener_mutex_);
listener = discovery_listener_;
}
if (listener == nullptr) return;
listener->OnEndpointDiscovered(endpoint_id, info->endpoint_info);
}
void FakeNearbyConnectionsManager::OnEndpointLost(
absl::string_view endpoint_id) {
if (!discovery_listener_) return;
discovery_listener_->OnEndpointLost(endpoint_id);
DiscoveryListener* listener = nullptr;
{
absl::MutexLock lock(&listener_mutex_);
listener = discovery_listener_;
}
if (listener == nullptr) return;
listener->OnEndpointLost(endpoint_id);
}
bool FakeNearbyConnectionsManager::IsAdvertising() const {
absl::MutexLock lock(&listener_mutex_);
return advertising_listener_ != nullptr;
}
bool FakeNearbyConnectionsManager::IsDiscovering() const {
absl::MutexLock lock(&listener_mutex_);
return discovery_listener_ != nullptr;
}
@@ -264,6 +282,7 @@ FakeNearbyConnectionsManager::GetRegisteredPayloadPath(int64_t payload_id) {
}
void FakeNearbyConnectionsManager::CleanupForProcessStopped() {
absl::MutexLock lock(&listener_mutex_);
advertising_listener_ = nullptr;
advertising_data_usage_ = DataUsage::UNKNOWN_DATA_USAGE;
advertising_power_level_ = PowerLevel::kUnknown;
+5 -2
View File
@@ -146,8 +146,11 @@ class FakeNearbyConnectionsManager : public NearbyConnectionsManager {
void HandleStartAdvertisingCallback(ConnectionsStatus status);
void HandleStopAdvertisingCallback(ConnectionsStatus status);
IncomingConnectionListener* advertising_listener_ = nullptr;
DiscoveryListener* discovery_listener_ = nullptr;
mutable absl::Mutex listener_mutex_;
IncomingConnectionListener* advertising_listener_
ABSL_GUARDED_BY(listener_mutex_) = nullptr;
DiscoveryListener* discovery_listener_ ABSL_GUARDED_BY(listener_mutex_) =
nullptr;
bool is_shutdown_ = false;
proto::DataUsage advertising_data_usage_ =
proto::DataUsage::UNKNOWN_DATA_USAGE;