Merge "Fix spurious mutex lock in MDnsEventReporter"
diff --git a/server/MDnsEventReporter.cpp b/server/MDnsEventReporter.cpp
index e94de36..92a376f 100644
--- a/server/MDnsEventReporter.cpp
+++ b/server/MDnsEventReporter.cpp
@@ -41,7 +41,6 @@
}
const MDnsEventReporter::EventListenerSet& MDnsEventReporter::getEventListenersImpl() const {
- std::lock_guard lock(mMutex);
return mEventListeners;
}
diff --git a/server/MDnsEventReporter.h b/server/MDnsEventReporter.h
index cbc43ec..22edbc4 100644
--- a/server/MDnsEventReporter.h
+++ b/server/MDnsEventReporter.h
@@ -51,7 +51,7 @@
// Return registered binder services from the singleton MDnsEventReporter. This method is
// threadsafe.
- const EventListenerSet& getEventListeners() const;
+ const EventListenerSet& getEventListeners() const REQUIRES(mMutex);
// Add the binder to the singleton MDnsEventReporter. This method is threadsafe.
int addEventListener(const android::sp<android::net::mdns::aidl::IMDnsEventListener>& listener);
@@ -60,11 +60,12 @@
int removeEventListener(
const android::sp<android::net::mdns::aidl::IMDnsEventListener>& listener);
+ mutable std::mutex mMutex;
+
private:
MDnsEventReporter() = default;
~MDnsEventReporter() = default;
- mutable std::mutex mMutex;
EventListenerSet mEventListeners GUARDED_BY(mMutex);
int addEventListenerImpl(
@@ -73,5 +74,5 @@
int removeEventListenerImpl(
const android::sp<android::net::mdns::aidl::IMDnsEventListener>& listener)
EXCLUDES(mMutex);
- const EventListenerSet& getEventListenersImpl() const EXCLUDES(mMutex);
+ const EventListenerSet& getEventListenersImpl() const REQUIRES(mMutex);
};
diff --git a/server/MDnsSdListener.cpp b/server/MDnsSdListener.cpp
index 1d1ea40..4bd5f0d 100644
--- a/server/MDnsSdListener.cpp
+++ b/server/MDnsSdListener.cpp
@@ -106,6 +106,7 @@
const char* replyDomain, void* inContext) {
MDnsSdListener::Context *context = reinterpret_cast<MDnsSdListener::Context *>(inContext);
int refNumber = context->mRefNumber;
+ const std::lock_guard lock(MDnsEventReporter::getInstance().mMutex);
const auto& listeners = MDnsEventReporter::getInstance().getEventListeners();
if (listeners.empty()) {
ALOGI("Discover callback not sent since no IMDnsEventListener receiver is available.");
@@ -193,6 +194,7 @@
void* inContext) {
MDnsSdListener::Context* context = reinterpret_cast<MDnsSdListener::Context*>(inContext);
int refNumber = context->mRefNumber;
+ const std::lock_guard lock(MDnsEventReporter::getInstance().mMutex);
const auto& listeners = MDnsEventReporter::getInstance().getEventListeners();
if (listeners.empty()) {
ALOGI("Register callback not sent since no IMDnsEventListener receiver is available.");
@@ -251,6 +253,7 @@
void* inContext) {
MDnsSdListener::Context* context = reinterpret_cast<MDnsSdListener::Context*>(inContext);
int refNumber = context->mRefNumber;
+ const std::lock_guard lock(MDnsEventReporter::getInstance().mMutex);
const auto& listeners = MDnsEventReporter::getInstance().getEventListeners();
if (listeners.empty()) {
ALOGI("Resolve callback not sent since no IMDnsEventListener receiver is available.");
@@ -313,6 +316,7 @@
uint32_t /* ttl */, void* inContext) {
MDnsSdListener::Context *context = reinterpret_cast<MDnsSdListener::Context *>(inContext);
int refNumber = context->mRefNumber;
+ const std::lock_guard lock(MDnsEventReporter::getInstance().mMutex);
const auto& listeners = MDnsEventReporter::getInstance().getEventListeners();
if (listeners.empty()) {
ALOGI("Get address callback not sent since no IMDnsEventListener receiver is available.");