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

Commit 2572051c authored by Mike Lockwood's avatar Mike Lockwood Committed by Android Git Automerger
Browse files

am 0aa5d7b7: DO NOT MERGE Fix deadlock in MountService

* commit '0aa5d7b7':
  DO NOT MERGE Fix deadlock in MountService
parents a2a8419d 0aa5d7b7
Loading
Loading
Loading
Loading
+32 −17
Original line number Diff line number Diff line
@@ -444,16 +444,32 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC
                 * to make the media scanner run.
                 */
                if ("simulator".equals(SystemProperties.get("ro.product.device"))) {
                    notifyVolumeStateChange(null, "/sdcard", VolumeState.NoMedia, VolumeState.Mounted);
                    notifyVolumeStateChange(null, "/sdcard", VolumeState.NoMedia,
                            VolumeState.Mounted);
                    return;
                }
                new Thread() {
                    @Override
                    public void run() {
                        try {
                            // it is not safe to call vold with mVolumeStates locked
                            // so we make a copy of the paths and states and process them
                            // outside the lock
                            String[] paths, states;
                            int count;
                            synchronized (mVolumeStates) {
                                for (String path : mVolumeStates.keySet()) {
                                    String state = mVolumeStates.get(path);
                                Set<String> keys = mVolumeStates.keySet();
                                count = keys.size();
                                paths = (String[])keys.toArray(new String[count]);
                                states = new String[count];
                                for (int i = 0; i < count; i++) {
                                    states[i] = mVolumeStates.get(paths[i]);
                                }
                            }

                            for (int i = 0; i < count; i++) {
                                String path = paths[i];
                                String state = states[i];

                                if (state.equals(Environment.MEDIA_UNMOUNTED)) {
                                    int rc = doMountVolume(path);
@@ -470,7 +486,6 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC
                                            VolumeState.Shared);
                                }
                            }
                            }

                            /*
                             * If UMS was connected on boot, send the connected event