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.");