diff --git a/services/incremental/IncrementalService.cpp b/services/incremental/IncrementalService.cpp
index 992a4ef..c3c2157 100644
--- a/services/incremental/IncrementalService.cpp
+++ b/services/incremental/IncrementalService.cpp
@@ -1670,9 +1670,15 @@
 
 void IncrementalService::DataLoaderStub::cleanupResources() {
     requestDestroy();
+
+    auto now = Clock::now();
+
+    std::unique_lock lock(mMutex);
     mParams = {};
     mControl = {};
-    waitForStatus(IDataLoaderStatusListener::DATA_LOADER_DESTROYED, std::chrono::seconds(60));
+    mStatusCondition.wait_until(lock, now + 60s, [this] {
+        return mCurrentStatus == IDataLoaderStatusListener::DATA_LOADER_DESTROYED;
+    });
     mListener = {};
     mId = kInvalidStorageId;
 }
@@ -1706,7 +1712,7 @@
 bool IncrementalService::DataLoaderStub::setTargetStatus(int newStatus) {
     int oldStatus, curStatus;
     {
-        std::unique_lock lock(mStatusMutex);
+        std::unique_lock lock(mMutex);
         oldStatus = mTargetStatus;
         curStatus = mCurrentStatus;
         setTargetStatusLocked(newStatus);
@@ -1721,13 +1727,6 @@
     mTargetStatusTs = Clock::now();
 }
 
-bool IncrementalService::DataLoaderStub::waitForStatus(int status, Clock::duration duration) {
-    auto now = Clock::now();
-    std::unique_lock lock(mStatusMutex);
-    return mStatusCondition.wait_until(lock, now + duration,
-                                       [this, status] { return mCurrentStatus == status; });
-}
-
 bool IncrementalService::DataLoaderStub::bind() {
     bool result = false;
     auto status = mService.mDataLoaderManager->bindToDataLoader(mId, mParams, this, &result);
@@ -1776,7 +1775,7 @@
     int currentStatus;
     int targetStatus;
     {
-        std::unique_lock lock(mStatusMutex);
+        std::unique_lock lock(mMutex);
         currentStatus = mCurrentStatus;
         targetStatus = mTargetStatus;
     }
@@ -1828,8 +1827,9 @@
     }
 
     int targetStatus, oldStatus;
+    DataLoaderStatusListener listener;
     {
-        std::unique_lock lock(mStatusMutex);
+        std::unique_lock lock(mMutex);
         if (mCurrentStatus == newStatus) {
             return binder::Status::ok();
         }
@@ -1838,6 +1838,8 @@
         mCurrentStatus = newStatus;
         targetStatus = mTargetStatus;
 
+        listener = mListener;
+
         if (mCurrentStatus == IDataLoaderStatusListener::DATA_LOADER_UNAVAILABLE) {
             // For unavailable, reset target status.
             setTargetStatusLocked(IDataLoaderStatusListener::DATA_LOADER_UNAVAILABLE);
@@ -1847,8 +1849,8 @@
     LOG(DEBUG) << "Current status update for DataLoader " << mId << ": " << oldStatus << " -> "
                << newStatus << " (target " << targetStatus << ")";
 
-    if (mListener) {
-        mListener->onStatusChanged(mountId, newStatus);
+    if (listener) {
+        listener->onStatusChanged(mountId, newStatus);
     }
 
     fsmStep();
diff --git a/services/incremental/IncrementalService.h b/services/incremental/IncrementalService.h
index d5c612d..cf310b1 100644
--- a/services/incremental/IncrementalService.h
+++ b/services/incremental/IncrementalService.h
@@ -188,17 +188,17 @@
 
         bool setTargetStatus(int status);
         void setTargetStatusLocked(int status);
-        bool waitForStatus(int status, Clock::duration duration);
 
         bool fsmStep();
 
         IncrementalService& mService;
+
+        std::mutex mMutex;
         MountId mId = kInvalidStorageId;
         content::pm::DataLoaderParamsParcel mParams;
         content::pm::FileSystemControlParcel mControl;
         DataLoaderStatusListener mListener;
 
-        std::mutex mStatusMutex;
         std::condition_variable mStatusCondition;
         int mCurrentStatus = content::pm::IDataLoaderStatusListener::DATA_LOADER_DESTROYED;
         int mTargetStatus = content::pm::IDataLoaderStatusListener::DATA_LOADER_DESTROYED;
