diff options
author | Jeff Sharkey <jsharkey@android.com> | 2012-03-01 20:59:22 -0800 |
---|---|---|
committer | Jeff Sharkey <jsharkey@android.com> | 2012-03-02 12:31:27 -0800 |
commit | e861b423790e5bf2d5a55b096065c6ad0541d5bb (patch) | |
tree | 0787b3cac04d166884e8f24ef6743fd9e735e8c8 /core/java/android/app/ActivityThread.java | |
parent | c81ec3637b8e3c177ec041aeb3863e123924505b (diff) | |
download | frameworks_base-e861b423790e5bf2d5a55b096065c6ad0541d5bb.zip frameworks_base-e861b423790e5bf2d5a55b096065c6ad0541d5bb.tar.gz frameworks_base-e861b423790e5bf2d5a55b096065c6ad0541d5bb.tar.bz2 |
Allow disk I/O while performing dump().
Add Closeable to ParcelFileDescriptor, and always close any incoming
PFDs when dumping.
Bug: 6106309
Change-Id: I25b465692d5e1da0a5980a307cb48a058bc2bca7
Diffstat (limited to 'core/java/android/app/ActivityThread.java')
-rw-r--r-- | core/java/android/app/ActivityThread.java | 56 |
1 files changed, 32 insertions, 24 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index d4b9a36..f2e7c98 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -102,6 +102,8 @@ import java.util.Map; import java.util.TimeZone; import java.util.regex.Pattern; +import libcore.io.IoUtils; + import dalvik.system.CloseGuard; final class SuperNotCalledException extends AndroidRuntimeException { @@ -2357,41 +2359,47 @@ public final class ActivityThread { } private void handleDumpService(DumpComponentInfo info) { - Service s = mServices.get(info.token); - if (s != null) { - PrintWriter pw = new PrintWriter(new FileOutputStream(info.fd.getFileDescriptor())); - s.dump(info.fd.getFileDescriptor(), pw, info.args); - pw.flush(); - try { - info.fd.close(); - } catch (IOException e) { + final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites(); + try { + Service s = mServices.get(info.token); + if (s != null) { + PrintWriter pw = new PrintWriter(new FileOutputStream(info.fd.getFileDescriptor())); + s.dump(info.fd.getFileDescriptor(), pw, info.args); + pw.flush(); } + } finally { + IoUtils.closeQuietly(info.fd); + StrictMode.setThreadPolicy(oldPolicy); } } private void handleDumpActivity(DumpComponentInfo info) { - ActivityClientRecord r = mActivities.get(info.token); - if (r != null && r.activity != null) { - PrintWriter pw = new PrintWriter(new FileOutputStream(info.fd.getFileDescriptor())); - r.activity.dump(info.prefix, info.fd.getFileDescriptor(), pw, info.args); - pw.flush(); - try { - info.fd.close(); - } catch (IOException e) { + final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites(); + try { + ActivityClientRecord r = mActivities.get(info.token); + if (r != null && r.activity != null) { + PrintWriter pw = new PrintWriter(new FileOutputStream(info.fd.getFileDescriptor())); + r.activity.dump(info.prefix, info.fd.getFileDescriptor(), pw, info.args); + pw.flush(); } + } finally { + IoUtils.closeQuietly(info.fd); + StrictMode.setThreadPolicy(oldPolicy); } } private void handleDumpProvider(DumpComponentInfo info) { - ProviderClientRecord r = mLocalProviders.get(info.token); - if (r != null && r.mLocalProvider != null) { - PrintWriter pw = new PrintWriter(new FileOutputStream(info.fd.getFileDescriptor())); - r.mLocalProvider.dump(info.fd.getFileDescriptor(), pw, info.args); - pw.flush(); - try { - info.fd.close(); - } catch (IOException e) { + final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites(); + try { + ProviderClientRecord r = mLocalProviders.get(info.token); + if (r != null && r.mLocalProvider != null) { + PrintWriter pw = new PrintWriter(new FileOutputStream(info.fd.getFileDescriptor())); + r.mLocalProvider.dump(info.fd.getFileDescriptor(), pw, info.args); + pw.flush(); } + } finally { + IoUtils.closeQuietly(info.fd); + StrictMode.setThreadPolicy(oldPolicy); } } |