Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1d6e6bfe authored by Yurii Zubrytskyi's avatar Yurii Zubrytskyi Committed by Android (Google) Code Review
Browse files

Merge "Removing race condition accessing shared binder object." into rvc-dev

parents 210bccd9 b6e02f7b
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -29,9 +29,9 @@ oneway interface IDataLoader {
   void create(int id, in DataLoaderParamsParcel params,
           in FileSystemControlParcel control,
           IDataLoaderStatusListener listener);
   void start();
   void stop();
   void destroy();
   void start(int id);
   void stop(int id);
   void destroy(int id);

   void prepareImage(in InstallationFileParcel[] addedFiles, in @utf8InCpp String[] removedFiles);
   void prepareImage(int id, in InstallationFileParcel[] addedFiles, in @utf8InCpp String[] removedFiles);
}
+16 −18
Original line number Diff line number Diff line
@@ -102,21 +102,18 @@ public abstract class DataLoaderService extends Service {
    }

    private class DataLoaderBinderService extends IDataLoader.Stub {
        private int mId;

        @Override
        public void create(int id, @NonNull DataLoaderParamsParcel params,
                @NonNull FileSystemControlParcel control,
                @NonNull IDataLoaderStatusListener listener)
                throws RuntimeException {
            mId = id;
            try {
                if (!nativeCreateDataLoader(id, control, params, listener)) {
                    Slog.e(TAG, "Failed to create native loader for " + mId);
                    Slog.e(TAG, "Failed to create native loader for " + id);
                }
            } catch (Exception ex) {
                Slog.e(TAG, "Failed to create native loader for " + mId, ex);
                destroy();
                Slog.e(TAG, "Failed to create native loader for " + id, ex);
                destroy(id);
                throw new RuntimeException(ex);
            } finally {
                // Closing FDs.
@@ -150,30 +147,31 @@ public abstract class DataLoaderService extends Service {
        }

        @Override
        public void start() {
            if (!nativeStartDataLoader(mId)) {
                Slog.e(TAG, "Failed to start loader: " + mId);
        public void start(int id) {
            if (!nativeStartDataLoader(id)) {
                Slog.e(TAG, "Failed to start loader: " + id);
            }
        }

        @Override
        public void stop() {
            if (!nativeStopDataLoader(mId)) {
                Slog.w(TAG, "Failed to stop loader: " + mId);
        public void stop(int id) {
            if (!nativeStopDataLoader(id)) {
                Slog.w(TAG, "Failed to stop loader: " + id);
            }
        }

        @Override
        public void destroy() {
            if (!nativeDestroyDataLoader(mId)) {
                Slog.w(TAG, "Failed to destroy loader: " + mId);
        public void destroy(int id) {
            if (!nativeDestroyDataLoader(id)) {
                Slog.w(TAG, "Failed to destroy loader: " + id);
            }
        }

        @Override
        public void prepareImage(InstallationFileParcel[] addedFiles, String[] removedFiles) {
            if (!nativePrepareImage(mId, addedFiles, removedFiles)) {
                Slog.w(TAG, "Failed to prepare image for data loader: " + mId);
        public void prepareImage(int id, InstallationFileParcel[] addedFiles,
                String[] removedFiles) {
            if (!nativePrepareImage(id, addedFiles, removedFiles)) {
                Slog.w(TAG, "Failed to prepare image for data loader: " + id);
            }
        }
    }
+1 −1
Original line number Diff line number Diff line
@@ -213,7 +213,7 @@ public class DataLoaderManagerService extends SystemService {

        void destroy() {
            try {
                mDataLoader.destroy();
                mDataLoader.destroy(mId);
            } catch (RemoteException ignored) {
            }
            mContext.unbindService(this);
+4 −3
Original line number Diff line number Diff line
@@ -2583,12 +2583,13 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
                            if (manualStartAndDestroy) {
                                // IncrementalFileStorages will call start after all files are
                                // created in IncFS.
                                dataLoader.start();
                                dataLoader.start(dataLoaderId);
                            }
                            break;
                        }
                        case IDataLoaderStatusListener.DATA_LOADER_STARTED: {
                            dataLoader.prepareImage(
                                    dataLoaderId,
                                    addedFiles.toArray(
                                            new InstallationFileParcel[addedFiles.size()]),
                                    removedFiles.toArray(new String[removedFiles.size()]));
@@ -2603,7 +2604,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
                                dispatchStreamValidateAndCommit();
                            }
                            if (manualStartAndDestroy) {
                                dataLoader.destroy();
                                dataLoader.destroy(dataLoaderId);
                            }
                            break;
                        }
@@ -2613,7 +2614,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
                                    new PackageManagerException(INSTALL_FAILED_MEDIA_UNAVAILABLE,
                                            "Failed to prepare image."));
                            if (manualStartAndDestroy) {
                                dataLoader.destroy();
                                dataLoader.destroy(dataLoaderId);
                            }
                            break;
                        }
+1 −1
Original line number Diff line number Diff line
@@ -941,7 +941,7 @@ bool IncrementalService::startDataLoader(MountId mountId) const {
    if (!dataloader) {
        return false;
    }
    status = dataloader->start();
    status = dataloader->start(mountId);
    if (!status.isOk()) {
        return false;
    }
Loading