Loading services/core/java/com/android/server/pm/DataLoaderManagerService.java +26 −9 Original line number Diff line number Diff line Loading @@ -190,14 +190,11 @@ public class DataLoaderManagerService extends SystemService { onNullBinding(className); return; } synchronized (mServiceConnections) { if (mServiceConnections.get(mId) != null) { if (!append()) { // Another connection already bound for this ID. mContext.unbindService(this); return; } mServiceConnections.append(mId, this); } callListener(IDataLoaderStatusListener.DATA_LOADER_BOUND); } Loading Loading @@ -234,15 +231,35 @@ public class DataLoaderManagerService extends SystemService { } mDataLoader = null; } try { mContext.unbindService(this); } catch (Exception ignored) { } remove(); } private boolean append() { synchronized (mServiceConnections) { DataLoaderServiceConnection bound = mServiceConnections.get(mId); if (bound == this) { return true; } if (bound != null) { // Another connection already bound for this ID. return false; } mServiceConnections.append(mId, this); return true; } } private void remove() { synchronized (mServiceConnections) { if (mServiceConnections.get(mId) == this) { mServiceConnections.remove(mId); } } } private void callListener(int status) { if (mListener != null) { Loading services/incremental/IncrementalService.cpp +25 −20 Original line number Diff line number Diff line Loading @@ -761,7 +761,10 @@ int IncrementalService::unbind(StorageId storage, std::string_view target) { std::unique_lock l2(ifs->lock); if (ifs->bindPoints.size() <= 1) { ifs->bindPoints.clear(); std::thread([this, ifs, l2 = std::move(l2)]() mutable { mJni->initializeForCurrentThread(); deleteStorageLocked(*ifs, std::move(l2)); }).detach(); } else { const std::string savedFile = std::move(bindIt->second.savedFilename); ifs->bindPoints.erase(bindIt); Loading @@ -770,6 +773,7 @@ int IncrementalService::unbind(StorageId storage, std::string_view target) { mIncFs->unlink(ifs->control, path::join(ifs->root, constants().mount, savedFile)); } } return 0; } Loading Loading @@ -1676,6 +1680,20 @@ void IncrementalService::DataLoaderStub::cleanupResources() { mId = kInvalidStorageId; } sp<content::pm::IDataLoader> IncrementalService::DataLoaderStub::getDataLoader() { sp<IDataLoader> dataloader; auto status = mService.mDataLoaderManager->getDataLoader(mId, &dataloader); if (!status.isOk()) { LOG(ERROR) << "Failed to get dataloader: " << status.toString8(); return {}; } if (!dataloader) { LOG(ERROR) << "DataLoader is null: " << status.toString8(); return {}; } return dataloader; } bool IncrementalService::DataLoaderStub::requestCreate() { return setTargetStatus(IDataLoaderStatusListener::DATA_LOADER_CREATED); } Loading Loading @@ -1720,17 +1738,11 @@ bool IncrementalService::DataLoaderStub::bind() { } bool IncrementalService::DataLoaderStub::create() { sp<IDataLoader> dataloader; auto status = mService.mDataLoaderManager->getDataLoader(mId, &dataloader); if (!status.isOk()) { LOG(ERROR) << "Failed to get dataloader: " << status.toString8(); return false; } auto dataloader = getDataLoader(); if (!dataloader) { LOG(ERROR) << "DataLoader is null: " << status.toString8(); return false; } status = dataloader->create(mId, mParams, mControl, this); auto status = dataloader->create(mId, mParams, mControl, this); if (!status.isOk()) { LOG(ERROR) << "Failed to start DataLoader: " << status.toString8(); return false; Loading @@ -1739,17 +1751,11 @@ bool IncrementalService::DataLoaderStub::create() { } bool IncrementalService::DataLoaderStub::start() { sp<IDataLoader> dataloader; auto status = mService.mDataLoaderManager->getDataLoader(mId, &dataloader); if (!status.isOk()) { LOG(ERROR) << "Failed to get dataloader: " << status.toString8(); return false; } auto dataloader = getDataLoader(); if (!dataloader) { LOG(ERROR) << "DataLoader is null: " << status.toString8(); return false; } status = dataloader->start(mId); auto status = dataloader->start(mId); if (!status.isOk()) { LOG(ERROR) << "Failed to start DataLoader: " << status.toString8(); return false; Loading @@ -1758,8 +1764,7 @@ bool IncrementalService::DataLoaderStub::start() { } bool IncrementalService::DataLoaderStub::destroy() { mService.mDataLoaderManager->unbindFromDataLoader(mId); return true; return mService.mDataLoaderManager->unbindFromDataLoader(mId).isOk(); } bool IncrementalService::DataLoaderStub::fsmStep() { Loading Loading @@ -1823,8 +1828,8 @@ binder::Status IncrementalService::DataLoaderStub::onStatusChanged(MountId mount if (mCurrentStatus == newStatus) { return binder::Status::ok(); } mCurrentStatus = newStatus; oldStatus = mCurrentStatus; mCurrentStatus = newStatus; targetStatus = mTargetStatus; } Loading services/incremental/IncrementalService.h +1 −0 Original line number Diff line number Diff line Loading @@ -179,6 +179,7 @@ private: binder::Status onStatusChanged(MountId mount, int newStatus) final; bool isValid() const { return mId != kInvalidStorageId; } sp<content::pm::IDataLoader> getDataLoader(); bool bind(); bool create(); Loading Loading
services/core/java/com/android/server/pm/DataLoaderManagerService.java +26 −9 Original line number Diff line number Diff line Loading @@ -190,14 +190,11 @@ public class DataLoaderManagerService extends SystemService { onNullBinding(className); return; } synchronized (mServiceConnections) { if (mServiceConnections.get(mId) != null) { if (!append()) { // Another connection already bound for this ID. mContext.unbindService(this); return; } mServiceConnections.append(mId, this); } callListener(IDataLoaderStatusListener.DATA_LOADER_BOUND); } Loading Loading @@ -234,15 +231,35 @@ public class DataLoaderManagerService extends SystemService { } mDataLoader = null; } try { mContext.unbindService(this); } catch (Exception ignored) { } remove(); } private boolean append() { synchronized (mServiceConnections) { DataLoaderServiceConnection bound = mServiceConnections.get(mId); if (bound == this) { return true; } if (bound != null) { // Another connection already bound for this ID. return false; } mServiceConnections.append(mId, this); return true; } } private void remove() { synchronized (mServiceConnections) { if (mServiceConnections.get(mId) == this) { mServiceConnections.remove(mId); } } } private void callListener(int status) { if (mListener != null) { Loading
services/incremental/IncrementalService.cpp +25 −20 Original line number Diff line number Diff line Loading @@ -761,7 +761,10 @@ int IncrementalService::unbind(StorageId storage, std::string_view target) { std::unique_lock l2(ifs->lock); if (ifs->bindPoints.size() <= 1) { ifs->bindPoints.clear(); std::thread([this, ifs, l2 = std::move(l2)]() mutable { mJni->initializeForCurrentThread(); deleteStorageLocked(*ifs, std::move(l2)); }).detach(); } else { const std::string savedFile = std::move(bindIt->second.savedFilename); ifs->bindPoints.erase(bindIt); Loading @@ -770,6 +773,7 @@ int IncrementalService::unbind(StorageId storage, std::string_view target) { mIncFs->unlink(ifs->control, path::join(ifs->root, constants().mount, savedFile)); } } return 0; } Loading Loading @@ -1676,6 +1680,20 @@ void IncrementalService::DataLoaderStub::cleanupResources() { mId = kInvalidStorageId; } sp<content::pm::IDataLoader> IncrementalService::DataLoaderStub::getDataLoader() { sp<IDataLoader> dataloader; auto status = mService.mDataLoaderManager->getDataLoader(mId, &dataloader); if (!status.isOk()) { LOG(ERROR) << "Failed to get dataloader: " << status.toString8(); return {}; } if (!dataloader) { LOG(ERROR) << "DataLoader is null: " << status.toString8(); return {}; } return dataloader; } bool IncrementalService::DataLoaderStub::requestCreate() { return setTargetStatus(IDataLoaderStatusListener::DATA_LOADER_CREATED); } Loading Loading @@ -1720,17 +1738,11 @@ bool IncrementalService::DataLoaderStub::bind() { } bool IncrementalService::DataLoaderStub::create() { sp<IDataLoader> dataloader; auto status = mService.mDataLoaderManager->getDataLoader(mId, &dataloader); if (!status.isOk()) { LOG(ERROR) << "Failed to get dataloader: " << status.toString8(); return false; } auto dataloader = getDataLoader(); if (!dataloader) { LOG(ERROR) << "DataLoader is null: " << status.toString8(); return false; } status = dataloader->create(mId, mParams, mControl, this); auto status = dataloader->create(mId, mParams, mControl, this); if (!status.isOk()) { LOG(ERROR) << "Failed to start DataLoader: " << status.toString8(); return false; Loading @@ -1739,17 +1751,11 @@ bool IncrementalService::DataLoaderStub::create() { } bool IncrementalService::DataLoaderStub::start() { sp<IDataLoader> dataloader; auto status = mService.mDataLoaderManager->getDataLoader(mId, &dataloader); if (!status.isOk()) { LOG(ERROR) << "Failed to get dataloader: " << status.toString8(); return false; } auto dataloader = getDataLoader(); if (!dataloader) { LOG(ERROR) << "DataLoader is null: " << status.toString8(); return false; } status = dataloader->start(mId); auto status = dataloader->start(mId); if (!status.isOk()) { LOG(ERROR) << "Failed to start DataLoader: " << status.toString8(); return false; Loading @@ -1758,8 +1764,7 @@ bool IncrementalService::DataLoaderStub::start() { } bool IncrementalService::DataLoaderStub::destroy() { mService.mDataLoaderManager->unbindFromDataLoader(mId); return true; return mService.mDataLoaderManager->unbindFromDataLoader(mId).isOk(); } bool IncrementalService::DataLoaderStub::fsmStep() { Loading Loading @@ -1823,8 +1828,8 @@ binder::Status IncrementalService::DataLoaderStub::onStatusChanged(MountId mount if (mCurrentStatus == newStatus) { return binder::Status::ok(); } mCurrentStatus = newStatus; oldStatus = mCurrentStatus; mCurrentStatus = newStatus; targetStatus = mTargetStatus; } Loading
services/incremental/IncrementalService.h +1 −0 Original line number Diff line number Diff line Loading @@ -179,6 +179,7 @@ private: binder::Status onStatusChanged(MountId mount, int newStatus) final; bool isValid() const { return mId != kInvalidStorageId; } sp<content::pm::IDataLoader> getDataLoader(); bool bind(); bool create(); Loading