summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerry Zhang <zhangjerry@google.com>2018-03-15 17:21:04 -0700
committerJerry Zhang <zhangjerry@google.com>2018-03-27 00:03:02 +0000
commitdfd5e7b69b36805308e2f6a502ecd46f09e67f78 (patch)
treecda2a79f5da16dda9156172f2a12313492c33a3e
parentae77b6967804af14a82a16ce79243a24d9d027d8 (diff)
downloadMediaProvider-dfd5e7b69b36805308e2f6a502ecd46f09e67f78.tar.gz
Don't leak MtpDatabase receiver.
There is a race on usb disconnect between MtpServer and UsbDeviceManager. If the kernel disconnect signal is sent to MtpService before MtpServer, the service will be stopped before the receiver is unregistered. To fix this, set the server in the database to null when service stops, which also unregisters the receiver. Addtional guards in MtpDatabase make it robust to a null server. Bug: 76433619 Test: no error Change-Id: I99dab3d2fb5884262b680e6a3e5eb4c5fb6a3457
-rw-r--r--src/com/android/providers/media/MtpService.java5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/com/android/providers/media/MtpService.java b/src/com/android/providers/media/MtpService.java
index 83db7176e..3c3534682 100644
--- a/src/com/android/providers/media/MtpService.java
+++ b/src/com/android/providers/media/MtpService.java
@@ -105,6 +105,11 @@ public class MtpService extends Service {
@Override
public void onDestroy() {
mStorageManager.unregisterListener(mStorageEventListener);
+ synchronized (MtpService.class) {
+ if (sServerHolder != null) {
+ sServerHolder.database.setServer(null);
+ }
+ }
}
@Override