mirror of
https://github.com/kidfromjupiter/nearby.git
synced 2026-09-14 22:56:12 -04:00
improve concurrency handling.
PiperOrigin-RevId: 626916898
This commit is contained in:
committed by
Copybara-Service
parent
1b4db47fb6
commit
ef924e5003
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user