Skip to content

Commit 0faca96

Browse files
Jeff SharkeyAndroid (Google) Code Review
authored andcommitted
Merge "Avoid deadlock by broadcasting outside lock." into mnc-dev
2 parents 405eceb + abc3e85 commit 0faca96

1 file changed

Lines changed: 10 additions & 4 deletions

File tree

services/core/java/com/android/server/MountService.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,7 @@ public void onServiceDisconnected(ComponentName name) {
559559
private static final int H_FSTRIM = 4;
560560
private static final int H_VOLUME_MOUNT = 5;
561561
private static final int H_VOLUME_BROADCAST = 6;
562+
private static final int H_INTERNAL_BROADCAST = 7;
562563

563564
class MountServiceHandler extends Handler {
564565
public MountServiceHandler(Looper looper) {
@@ -655,6 +656,13 @@ public void handleMessage(Message msg) {
655656
}
656657
break;
657658
}
659+
case H_INTERNAL_BROADCAST: {
660+
// Internal broadcasts aimed at system components, not for
661+
// third-party apps.
662+
final Intent intent = (Intent) msg.obj;
663+
mContext.sendBroadcastAsUser(intent, UserHandle.ALL,
664+
android.Manifest.permission.WRITE_MEDIA_STORAGE);
665+
}
658666
}
659667
}
660668
}
@@ -1126,8 +1134,7 @@ private void onDiskScannedLocked(DiskInfo disk) {
11261134
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
11271135
intent.putExtra(DiskInfo.EXTRA_DISK_ID, disk.id);
11281136
intent.putExtra(DiskInfo.EXTRA_VOLUME_COUNT, volumeCount);
1129-
mContext.sendBroadcastAsUser(intent, UserHandle.ALL,
1130-
android.Manifest.permission.WRITE_MEDIA_STORAGE);
1137+
mHandler.obtainMessage(H_INTERNAL_BROADCAST, intent).sendToTarget();
11311138

11321139
final CountDownLatch latch = mDiskScanLatches.remove(disk.id);
11331140
if (latch != null) {
@@ -1239,8 +1246,7 @@ private void onVolumeStateChangedLocked(VolumeInfo vol, int oldState, int newSta
12391246
intent.putExtra(VolumeInfo.EXTRA_VOLUME_STATE, newState);
12401247
intent.putExtra(VolumeRecord.EXTRA_FS_UUID, vol.fsUuid);
12411248
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
1242-
mContext.sendBroadcastAsUser(intent, UserHandle.ALL,
1243-
android.Manifest.permission.WRITE_MEDIA_STORAGE);
1249+
mHandler.obtainMessage(H_INTERNAL_BROADCAST, intent).sendToTarget();
12441250
}
12451251

12461252
final String oldStateEnv = VolumeInfo.getEnvironmentForState(oldState);

0 commit comments

Comments
 (0)