diff options
author | Jerry Zhang <zhangjerry@google.com> | 2018-03-15 17:21:04 -0700 |
---|---|---|
committer | Jerry Zhang <zhangjerry@google.com> | 2018-03-27 00:03:02 +0000 |
commit | dfd5e7b69b36805308e2f6a502ecd46f09e67f78 (patch) | |
tree | cda2a79f5da16dda9156172f2a12313492c33a3e | |
parent | ae77b6967804af14a82a16ce79243a24d9d027d8 (diff) | |
download | MediaProvider-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.java | 5 |
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 |