Fixed the deadlock issue in hotspot

PiperOrigin-RevId: 540283852
This commit is contained in:
Guogang Li
2023-06-14 08:52:59 -07:00
committed by Copybara-Service
parent c4139c83b0
commit 5ae556499b
3 changed files with 20 additions and 19 deletions
@@ -175,16 +175,16 @@ std::unique_ptr<api::WifiDirectServerSocket> WifiDirectMedium::ListenForService(
auto server_socket = std::make_unique<WifiDirectServerSocket>(port);
server_socket_ptr_ = server_socket.get();
server_socket->SetCloseNotifier([this]() {
absl::MutexLock lock(&mutex_);
NEARBY_LOGS(INFO) << "server socket was closed on port "
<< server_socket_ptr_->GetPort();
medium_status_ &= (~kMediumStatusAccepting);
server_socket_ptr_ = nullptr;
});
if (server_socket->listen()) {
medium_status_ |= kMediumStatusAccepting;
server_socket->SetCloseNotifier([this]() {
absl::MutexLock lock(&mutex_);
NEARBY_LOGS(INFO) << "server socket was closed on port "
<< server_socket_ptr_->GetPort();
medium_status_ &= (~kMediumStatusAccepting);
server_socket_ptr_ = nullptr;
});
NEARBY_LOGS(INFO) << "started to listen serive on port "
<< server_socket_ptr_->GetPort();
return server_socket;
@@ -192,15 +192,16 @@ WifiHotspotMedium::ListenForService(int port) {
auto server_socket = std::make_unique<WifiHotspotServerSocket>(port);
server_socket_ptr_ = server_socket.get();
server_socket->SetCloseNotifier([this]() {
absl::MutexLock lock(&mutex_);
NEARBY_LOGS(INFO) << "Server socket was closed.";
medium_status_ &= (~kMediumStatusAccepting);
server_socket_ptr_ = nullptr;
});
if (server_socket->listen()) {
medium_status_ |= kMediumStatusAccepting;
// Setup close notifier after listen started.
server_socket->SetCloseNotifier([this]() {
absl::MutexLock lock(&mutex_);
NEARBY_LOGS(INFO) << "Server socket was closed.";
medium_status_ &= (~kMediumStatusAccepting);
server_socket_ptr_ = nullptr;
});
NEARBY_LOGS(INFO) << "Started to listen serive on port "
<< server_socket_ptr_->GetPort();
return server_socket;
@@ -123,6 +123,10 @@ Exception WifiHotspotServerSocket::Close() {
absl::MutexLock lock(&mutex_);
NEARBY_LOGS(INFO) << __func__ << ": Close is called.";
if (closed_) {
return {Exception::kSuccess};
}
if (NearbyFlags::GetInstance().GetBoolFlag(
platform::config_package_nearby::nearby_platform_feature::
kEnableHotspotWin32Socket)) {
@@ -154,10 +158,6 @@ Exception WifiHotspotServerSocket::Close() {
}
}
if (closed_) {
return {Exception::kSuccess};
}
closed_ = true;
cond_.SignalAll();
if (close_notifier_ != nullptr) {