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