summaryrefslogtreecommitdiffstats
path: root/core/java/android/app/ActivityThread.java
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2012-03-01 20:59:22 -0800
committerJeff Sharkey <jsharkey@android.com>2012-03-02 12:31:27 -0800
commite861b423790e5bf2d5a55b096065c6ad0541d5bb (patch)
tree0787b3cac04d166884e8f24ef6743fd9e735e8c8 /core/java/android/app/ActivityThread.java
parentc81ec3637b8e3c177ec041aeb3863e123924505b (diff)
downloadframeworks_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.java56
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);
}
}