mirror of
https://github.com/kidfromjupiter/nearby.git
synced 2026-09-14 22:56:12 -04:00
Fixed the deadlock issue in hotspot
PiperOrigin-RevId: 540283852
This commit is contained in:
committed by
Copybara-Service
parent
c4139c83b0
commit
5ae556499b
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user