Loading services/java/com/android/server/MountService.java +20 −26 Original line number Diff line number Diff line Loading @@ -213,15 +213,14 @@ class MountService extends IMountService.Stub } case H_UNMOUNT_PM_DONE: { if (DEBUG_UNMOUNT) Slog.i(TAG, "H_UNMOUNT_PM_DONE"); if (!mUpdatingStatus) { // Does not correspond to unmount's status update. return; } if (DEBUG_UNMOUNT) Slog.i(TAG, "Updated status. Processing requests"); mUpdatingStatus = false; int size = mForceUnmounts.size(); int sizeArr[] = new int[size]; int sizeArrN = 0; // Kill processes holding references first ActivityManagerService ams = (ActivityManagerService) ServiceManager.getService("activity"); for (int i = 0; i < size; i++) { UnmountCallBack ucb = mForceUnmounts.get(i); String path = ucb.path; Loading @@ -233,12 +232,8 @@ class MountService extends IMountService.Stub if (pids == null || pids.length == 0) { done = true; } else { // Kill processes holding references first ActivityManagerService ams = (ActivityManagerService) ServiceManager.getService("activity"); // Eliminate system process here? boolean ret = ams.killPids(pids, "Unmount media"); if (ret) { ams.killPids(pids, "unmount media"); // Confirm if file references have been freed. pids = getStorageUsers(path); if (pids == null || pids.length == 0) { Loading @@ -246,22 +241,21 @@ class MountService extends IMountService.Stub } } } } if (done) { sizeArr[sizeArrN++] = i; mHandler.sendMessage(mHandler.obtainMessage(H_UNMOUNT_MS, ucb)); } else { if (ucb.retries >= MAX_UNMOUNT_RETRIES) { Slog.i(TAG, "Cannot unmount media inspite of " + MAX_UNMOUNT_RETRIES + " retries"); // Send final broadcast indicating failure to unmount. } else { if (!done && (ucb.retries < MAX_UNMOUNT_RETRIES)) { // Retry again Slog.i(TAG, "Retrying to kill storage users again"); mHandler.sendMessageDelayed( mHandler.obtainMessage(H_UNMOUNT_PM_DONE, ucb.retries++), RETRY_UNMOUNT_DELAY); } else { if (ucb.retries >= MAX_UNMOUNT_RETRIES) { Slog.i(TAG, "Failed to unmount media inspite of " + MAX_UNMOUNT_RETRIES + " retries. Forcibly killing processes now"); } sizeArr[sizeArrN++] = i; mHandler.sendMessage(mHandler.obtainMessage(H_UNMOUNT_MS, ucb)); } } // Remove already processed elements from list. Loading Loading
services/java/com/android/server/MountService.java +20 −26 Original line number Diff line number Diff line Loading @@ -213,15 +213,14 @@ class MountService extends IMountService.Stub } case H_UNMOUNT_PM_DONE: { if (DEBUG_UNMOUNT) Slog.i(TAG, "H_UNMOUNT_PM_DONE"); if (!mUpdatingStatus) { // Does not correspond to unmount's status update. return; } if (DEBUG_UNMOUNT) Slog.i(TAG, "Updated status. Processing requests"); mUpdatingStatus = false; int size = mForceUnmounts.size(); int sizeArr[] = new int[size]; int sizeArrN = 0; // Kill processes holding references first ActivityManagerService ams = (ActivityManagerService) ServiceManager.getService("activity"); for (int i = 0; i < size; i++) { UnmountCallBack ucb = mForceUnmounts.get(i); String path = ucb.path; Loading @@ -233,12 +232,8 @@ class MountService extends IMountService.Stub if (pids == null || pids.length == 0) { done = true; } else { // Kill processes holding references first ActivityManagerService ams = (ActivityManagerService) ServiceManager.getService("activity"); // Eliminate system process here? boolean ret = ams.killPids(pids, "Unmount media"); if (ret) { ams.killPids(pids, "unmount media"); // Confirm if file references have been freed. pids = getStorageUsers(path); if (pids == null || pids.length == 0) { Loading @@ -246,22 +241,21 @@ class MountService extends IMountService.Stub } } } } if (done) { sizeArr[sizeArrN++] = i; mHandler.sendMessage(mHandler.obtainMessage(H_UNMOUNT_MS, ucb)); } else { if (ucb.retries >= MAX_UNMOUNT_RETRIES) { Slog.i(TAG, "Cannot unmount media inspite of " + MAX_UNMOUNT_RETRIES + " retries"); // Send final broadcast indicating failure to unmount. } else { if (!done && (ucb.retries < MAX_UNMOUNT_RETRIES)) { // Retry again Slog.i(TAG, "Retrying to kill storage users again"); mHandler.sendMessageDelayed( mHandler.obtainMessage(H_UNMOUNT_PM_DONE, ucb.retries++), RETRY_UNMOUNT_DELAY); } else { if (ucb.retries >= MAX_UNMOUNT_RETRIES) { Slog.i(TAG, "Failed to unmount media inspite of " + MAX_UNMOUNT_RETRIES + " retries. Forcibly killing processes now"); } sizeArr[sizeArrN++] = i; mHandler.sendMessage(mHandler.obtainMessage(H_UNMOUNT_MS, ucb)); } } // Remove already processed elements from list. Loading